Allmänna riktlinjer för MySQL

Mer information om vilka versioner av MySQL som stöds finns i Systemkrav.

Adobe rekommenderar starkt att du följer följande standard när du konfigurerar databasen:

  • Adobe Commerce använder MySQL-databasutlösare för att förbättra databasåtkomsten under omindexering. Dessa skapas när indexeringsläget är inställt på schedule. Programmet stöder inte några anpassade utlösare i databasen eftersom anpassade utlösare kan orsaka inkompatibilitet med framtida Adobe Commerce-versioner.
  • Bekanta dig med dessa potentiella begränsningar för MySQL-utlösare innan du fortsätter.
  • Aktivera SQL-läget STRICT_ALL_TABLES om du vill förbättra databasens säkerhetsposition och förhindra att ogiltiga datavärden lagras, vilket kan orsaka oönskade databasinteraktioner.
  • Adobe Commerce har inte stöd för MySQL-satsbaserad replikering. Se till att du använder endast radbaserad replikering.
WARNING
Adobe Commerce använder för närvarande CREATE TEMPORARY TABLE-satser inuti transaktioner, som är inkompatibla med databasimplementeringar använder GTID-baserad replikering, till exempel Google Cloud SQL-instanser av andra generationen. Överväg MySQL för Cloud SQL 8.0 som ett alternativ.
NOTE
Om webbservern och databasservern finns på olika värdar kan du utföra de uppgifter som beskrivs i det här avsnittet på databasservervärden. Mer information finns i Konfigurera en MySQL-fjärrdatabasanslutning.

Installerar MySQL på Ubuntu

Adobe Commerce 2.4 kräver en ren installation av MySQL 8.0. Följ länkarna nedan för instruktioner om hur du installerar MySQL på datorn.

Om du förväntar dig att importera ett stort antal produkter kan du öka värdet för max_allowed_packet som är större än standardvärdet, 16 MB.

NOTE
Standardvärdet gäller för Adobe Commerce i molninfrastrukturen och lokala projekt. Adobe Commerce i molninfrastruktur Pro-kunder måste öppna en supportbiljett för att öka värdet max_allowed_packet. Adobe Commerce på molninfrastruktur Starter-kunder kan öka värdet genom att uppdatera konfigurationen i filen /etc/mysql/mysql.cnf.

Om du vill öka värdet öppnar du filen /etc/mysql/mysql.cnf i en textredigerare och letar upp värdet för max_allowed_packet. Spara ändringarna i filen mysql.cnf, stäng textredigeraren och starta om MySQL (service mysql restart).

Om du vill verifiera det värde du anger anger du följande kommando vid en mysql>-prompt:

SHOW VARIABLES LIKE 'max_allowed_packet';

Konfigurera sedan databasinstansen.

MySQL 8-ändringar

För Adobe Commerce 2.4 har vi lagt till stöd för MySQL 8.
I det här avsnittet beskrivs viktiga ändringar av MySQL 8 som utvecklare bör känna till.

Bredd för heltalstyper (utfyllnad) har tagits bort

Specifikationen för visningsbredd för heltalsdatatyper (TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT) har tagits bort i MySQL 8.0.17. Programsatser som innehåller datatypsdefinitioner i utdata visar inte längre visningsbredden för heltalstyper, förutom TINYINT(1). MySQL-kopplingar förutsätter att TINYINT(1)-kolumner har sitt ursprung som BOOLEAN-kolumner. Med det här undantaget kan de fortsätta att göra det antagandet.

Exempel

Beskriv admin_user vid mysql 8.19

Fält
Typ
Null
Nyckel
Standard
Extra
user_id
int unsigned
NEJ
PRI
NULL
auto_increment
firstname
varchar(32)
JA
NULL
lastname
varchar(32)
JA
NULL
email
varchar(128)
JA
NULL
username
varchar(40)
JA
UNI
NULL
password
varchar(255)
NEJ
NULL
created
timestamp
NEJ
CURRENT_TIMESTAMP
DEFAULT_GENERATED
modified
timestamp
NEJ
CURRENT_TIMESTAMP
DEFAULT_GENERATED vid uppdatering CURRENT_TIMESTAMP
logdate
timestamp
JA
NULL
lognum
smallint unsigned
NEJ
0

Med undantag för TINYINT(1) ska all heltalsutfyllnad (TINYINT > 1, SMALLINT, MEDIUMINT, INT, BIGINT) tas bort från filen db_schema.xml.

Mer information finns i https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-19.html#mysqld-8-0-19-feature.

Standardbeteendet ORDER BY

Före 8.0 sorterades posterna efter sekundärnyckeln. Standardsorteringsordningen beror på vilken motor som används.
Ange alltid en sorteringsordning om koden är beroende av en viss sortering.

ASC- och DESC-kvalificerare för GROUP BY har tagits bort

Från och med MySQL 8.0.13 har de inaktuella ASC- eller DESC-kvalificerarna för GROUP BY-satser tagits bort. Frågor som tidigare förlitat sig på GROUP BY-sortering kan ge resultat som skiljer sig från tidigare MySQL-versioner. Om du vill skapa en given sorteringsordning anger du en ORDER BY-sats.

Commerce och MySQL 8

Vissa förändringar i Adobe Commerce har gjorts för att stödja MySQL 8.

Fråge- och infogningsbeteende

Adobe Commerce inaktiverade det reguljära valideringsbeteendet genom att ställa in SET SQL_MODE='' i /lib/internal/Magento/Framework/DB/Adapter/Pdo/Mysql.php:424.. Om valideringen är inaktiverad är det möjligt att MySQL trunkerar data. I MySQL har frågebeteendet ändrats: Select * on my_table where IP='127.0.0.1' returnerar inte längre resultat eftersom IP-adressen nu visas korrekt som en sträng i stället för som ett heltal.

Uppgraderar från MySQL 5.7 till MySQL 8

Om du vill uppdatera MySQL korrekt från version 5.7 till version 8 måste du följa dessa steg för att:

  1. Uppgradera Adobe Commerce till 2.4.0.
    Testa allt och kontrollera att systemet fungerar som det ska.

  2. Aktivera underhållsläge:

    code language-bash
    bin/magento maintenance:enable
    
  3. Säkerhetskopiera databasen:

    code language-bash
    bin/magento setup:backup --db
    
  4. Uppdatera MySQL till version 8.

  5. Importera säkerhetskopierade data till MySQL.

  6. Rensa cachen:

    code language-bash
    bin/magento cache:clean
    
  7. Inaktivera underhållsläge:

    code language-bash
    bin/magento maintenance:disable
    

Konfigurera databasinstansen

I det här avsnittet beskrivs hur du skapar en databasinstans för Adobe Commerce. Även om en ny databasinstans rekommenderas kan du installera Adobe Commerce med en befintlig databasinstans.

Så här konfigurerar du en MySQL-databasinstans:

  1. Logga in på databasservern som vilken användare som helst.

  2. Gå till en MySQL-kommandotolk:

    code language-bash
    mysql -u root -p
    
  3. Ange användarens lösenord för MySQL root när du uppmanas till det.

  4. Ange följande kommandon i den ordning som visas för att skapa en databasinstans med namnet magento med användarnamnet magento:

    code language-sql
    create database magento;
    
    code language-sql
    create user 'magento'@'localhost' IDENTIFIED BY 'magento';
    
    code language-sql
    GRANT ALL ON magento.* TO 'magento'@'localhost';
    
    code language-sql
    flush privileges;
    
  5. Ange exit för att avsluta kommandotolken.

  6. Verifiera databasen:

    code language-bash
    mysql -u magento -p
    

    Om MySQL-övervakaren visas har du skapat databasen på rätt sätt. Om ett fel visas upprepar du de föregående kommandona.

  7. Om webbservern och databasservern finns på olika värdar kan du utföra de uppgifter som beskrivs i det här avsnittet på databasservervärden. Mer information finns i Konfigurera en MySQL-fjärrdatabasanslutning.

    Vi rekommenderar att du konfigurerar din databasinstans så att den passar ditt företag. Tänk på följande när du konfigurerar databasen:

    • Indexerare kräver högre tmp_table_size- och max_heap_table_size-värden (till exempel 64 MB). Om du konfigurerar parametern batch_size kan du justera det värdet tillsammans med tabellstorleksinställningarna för att förbättra indexerarens prestanda. Mer information finns i Optimeringsguiden.

    • Kontrollera att alla indextabeller för MySQL och Adobe Commerce kan sparas i minnet (till exempel konfigurera innodb_buffer_pool_size) för att få optimala prestanda.

    • Omindexering av MariaDB 10.4 tar längre tid jämfört med andra versioner av MariaDB eller MySQL. Se Bästa praxis för konfiguration.

  8. För att MySQL TIMESTAMP-fält ska följa de inställningar och den komposition som förväntas av programmets deklarativa schemaarkitektur måste systemvariabeln explicit_defaults_for_timestamp anges till on.

    Referenser:

    Om den här inställningen inte är aktiverad rapporterar bin/magento setup:db:status alltid att Declarative Schema is not up to date.

NOTE
Inställningen explicit_defaults_for_timestamp är inaktuell. Den här inställningen kontrollerar inaktuella TIMESTAMP-beteenden som kommer att tas bort i en framtida MySQL-version. När dessa beteenden tas bort tas även inställningen explicit_defaults_for_timestamp bort.
WARNING
För Adobe Commerce i molninfrastrukturprojekt är explicit_defaults_for_timestamp-inställningen för MySQL (MariaDB) som standard OFF.

Omindexering av MariaDB 10.4 och 10.6 tar längre tid jämfört med tidigare versioner av MariaDB eller MySQL. För att påskynda omindexeringen rekommenderar vi att du ställer in följande konfigurationsparametrar för MariaDB:

Om prestandaförsämringar inte har att göra med indexering efter uppgradering till MariaDB 10.6 bör du aktivera inställningen --query-cache-type. Exempel: --query-cache-type=ON.

Innan du uppgraderar Adobe Commerce i molninfrastrukturprojekt kan du behöva uppgradera MariaDB (se MariaDB upgrade best practices).

Exempel:

  • Adobe Commerce 2.4.6 med MariaDB version 10.5.1 eller senare
  • Adobe Commerce 2.3.5 med MariaDB version 10.3 eller tidigare

Utöver dessa rekommendationer bör du rådfråga databasadministratören om hur du konfigurerar följande parametrar:

NOTE
De här inställningarna är endast tillgängliga för lokala distributioner. Adobe Commerce på molninfrastrukturkunder har inte tillgång till dessa inställningar.
recommendation-more-help
0f8e7db5-0e9c-4002-a5b8-a0088077d995