Allgemeine MySQL-Richtlinien
Siehe Systemanforderungen für unterstützte Versionen von MySQL.
Adobe empfiehlt, beim Einrichten der Datenbank den folgenden Standard zu beachten:
- Adobe Commerce Trigger verwendet MySQL-Datenbank-, um den Datenbankzugriff während der Neuindizierung zu verbessern. Diese werden erstellt, wenn der Indexermodus auf ""ist. Das Programm unterstützt keine benutzerdefinierten Trigger in der Datenbank, da benutzerdefinierte Trigger Inkompatibilitäten mit zukünftigen Adobe Commerce-Versionen einführen können.
- Machen Sie sich mit diesen potenziellen Einschränkungen von MySQL Triggervertraut, bevor Sie fortfahren.
- Um den Sicherheitszustand Ihrer Datenbank zu verbessern, aktivieren Sie den
STRICT_ALL_TABLES
SQL-Modus, um zu verhindern, dass ungültige Datenwerte gespeichert werden, was zu unerwünschten Datenbankinteraktionen führen könnte. - Adobe Commerce unterstützt nicht die auf MySQL-Anweisungen basierende Replikation. Stellen Sie sicher dass Siezeilenbasierte Replikation verwenden.
CREATE TEMPORARY TABLE
-Anweisungen innerhalb von Transaktionen, die inkompatibel mit Datenbankimplementierungen sind und eine GTID-basierte Replikation verwenden, z. B. Google Cloud SQL-Instanzen der zweiten Generation. Betrachten Sie MySQL für Cloud SQL 8.0 als Alternative.Installieren von MySQL auf Ubuntu
Adobe Commerce 2.4 erfordert eine Neuinstallation von MySQL 8.0. Folgen Sie den unten stehenden Links, um Anweisungen zur Installation von MySQL auf Ihrem Computer zu erhalten.
Wenn Sie erwarten, dass Sie eine große Anzahl von Produkten importieren, können Sie den Wert für max_allowed_packet
erhöhen, der größer ist als der Standardwert (16 MB).
max_allowed_packet
zu erhöhen. Adobe Commerce on Cloud Infrastructure Starter-Kunden können den Wert erhöhen, indem sie die Konfiguration in der /etc/mysql/mysql.cnf
aktualisieren.Um den Wert zu erhöhen, öffnen Sie die /etc/mysql/mysql.cnf
in einem Texteditor und suchen Sie den Wert für max_allowed_packet
. Speichern Sie Ihre Änderungen in der mysql.cnf
-Datei, schließen Sie den Texteditor und starten Sie MySQL neu (service mysql restart
).
Um optional den von Ihnen festgelegten Wert zu überprüfen, geben Sie den folgenden Befehl an einer mysql>
ein:
SHOW VARIABLES LIKE 'max_allowed_packet';
Wählen Sie dann Datenbankinstanz konfigurieren.
MySQL 8-Änderungen
Für Adobe Commerce 2.4 wurde Unterstützung für MySQL 8 hinzugefügt.
In diesem Abschnitt werden wichtige Änderungen an MySQL 8 beschrieben, die Entwickler beachten sollten.
Breite für ganzzahlige Typen wurde entfernt (Abstand)
Die Angabe der Anzeigebreite für ganzzahlige Datentypen (TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT) wird in MySQL 8.0.17 nicht mehr unterstützt. Anweisungen, die Datentypdefinitionen in ihrer Ausgabe enthalten, zeigen die Anzeigebreite für ganzzahlige Typen nicht mehr an, außer für TINYINT(1). MySQL-Connectoren gehen davon aus, dass TINYINT(1)-Spalten als BOOLESCHE Spalten entstanden sind. Diese Ausnahme ermöglicht es ihnen, weiterhin von dieser Annahme auszugehen.
Beispiel
Beschreibung von admin_user unter mysql 8.19
int unsigned
NULL
auto_increment
firstname
varchar(32)
NULL
lastname
varchar(32
)NULL
email
varchar(128)
NULL
username
varchar(40)
NULL
password
varchar(255)
NULL
created
timestamp
CURRENT_TIMESTAMP
DEFAULT_GENERATED
modified
timestamp
CURRENT_TIMESTAMP
DEFAULT_GENERATED
auf Update-CURRENT_TIMESTAMP
logdate
timestamp
NULL
lognum
smallint unsigned
0
Mit Ausnahme von TINYINT(1) sollten alle ganzzahligen Auffüllungen (TINYINT > 1, SMALLINT, MEDIUMINT, INT, BIGINT) aus der db_schema.xml
-Datei entfernt werden.
https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-19.html#mysqld-8-0-19-feature Weitere Informationen finden Sie unter 🔗.
Standardverhalten von ORDER BY
Vor 8.0 wurden die Einträge nach dem Fremdschlüssel sortiert. Die standardmäßige Sortierreihenfolge hängt von der verwendeten Engine ab.
Geben Sie immer eine Sortierreihenfolge an, wenn Ihr Code von einer bestimmten Sortierung abhängt.
Veraltete ASC- und DESC-Kriterien für GROUP BY
Ab MySQL 8.0.13 wurden die veralteten ASC
- oder DESC
für GROUP BY
entfernt. Abfragen, die sich zuvor auf GROUP BY
Sortierung stützten, können zu Ergebnissen führen, die sich von früheren MySQL-Versionen unterscheiden. Um eine bestimmte Sortierreihenfolge zu erzeugen, geben Sie eine ORDER BY
-Klausel an.
Commerce und MySQL 8
Adobe Commerce wurde geändert, um MySQL 8 ordnungsgemäß zu unterstützen.
Abfrage- und Einfügeverhalten
Adobe Commerce hat das Verhalten bei regulärer Validierung deaktiviert, indem es SET SQL_MODE='' in /lib/internal/Magento/Framework/DB/Adapter/Pdo/Mysql.php:424.
festgelegt hat. Bei deaktivierter Validierung ist es möglich, dass MySQL Daten abschneidet. In MySQL hat sich das Abfrageverhalten geändert: Select * on my_table where IP='127.0.0.1'
gibt jetzt keine Ergebnisse mehr zurück, da die IP-Adresse nun korrekt als Zeichenfolge und nicht mehr als Ganzzahl angezeigt wird.
Aktualisieren von MySQL 5.7 auf MySQL 8
Um MySQL ordnungsgemäß von Version 5.7 auf Version 8 zu aktualisieren, müssen Sie die folgenden Schritte in der richtigen Reihenfolge ausführen:
-
Aktualisieren Sie Adobe Commerce auf 2.4.0.
Testen Sie alles und stellen Sie sicher, dass Ihr System erwartungsgemäß funktioniert. -
Wartungsmodus aktivieren:
code language-bash bin/magento maintenance:enable
-
Erstellen Sie eine Datenbanksicherung:
code language-bash bin/magento setup:backup --db
-
MySQL auf Version 8 aktualisieren.
-
Importieren Sie die gesicherten Daten in MySQL.
-
Cache leeren:
code language-bash bin/magento cache:clean
-
Wartungsmodus deaktivieren:
code language-bash bin/magento maintenance:disable
Datenbankinstanz konfigurieren
In diesem Abschnitt wird beschrieben, wie Sie eine Datenbankinstanz für Adobe Commerce erstellen. Obwohl eine neue Datenbankinstanz empfohlen wird, können Sie Adobe Commerce optional mit einer vorhandenen Datenbankinstanz installieren.
Konfigurieren einer MySQL-Datenbankinstanz:
-
Melden Sie sich bei Ihrem Datenbank-Server als beliebiger Benutzer an.
-
Wechseln Sie zu einer MySQL-Eingabeaufforderung:
code language-bash mysql -u root -p
-
Geben Sie bei Aufforderung das Kennwort des MySQL-
root
-Benutzers ein. -
Geben Sie die folgenden Befehle in der angegebenen Reihenfolge ein, um eine Datenbankinstanz mit dem Namen
magento
mit dem Benutzernamenmagento
zu erstellen: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;
-
Geben Sie
exit
ein, um die Eingabeaufforderung zu beenden. -
Überprüfen Sie die Datenbank:
code language-bash mysql -u magento -p
Wenn der MySQL-Monitor angezeigt wird, haben Sie die Datenbank ordnungsgemäß erstellt. Wenn ein Fehler angezeigt wird, wiederholen Sie die vorherigen Befehle.
-
Wenn sich Ihr Webserver und Datenbankserver auf unterschiedlichen Hosts befinden, führen Sie die in diesem Thema beschriebenen Aufgaben auf dem Datenbankserverhost aus. Weitere Informationen finden Sie unter Einrichten einer Remote-MySQL-Datenbankverbindung.
Es wird empfohlen, die Datenbankinstanz für Ihr Unternehmen entsprechend zu konfigurieren. Beachten Sie beim Konfigurieren Ihrer Datenbank Folgendes:
-
Indexer benötigen höhere
tmp_table_size
undmax_heap_table_size
Werte (z. B. 64 M). Wenn Sie denbatch_size
konfigurieren, können Sie diesen Wert zusammen mit den Tabellengrößeneinstellungen anpassen, um die Indexerleistung zu verbessern. Weitere Informationen finden Sie Optimierungshandbuch . -
Um eine optimale Leistung zu erzielen, stellen Sie sicher, dass alle MySQL- und Adobe Commerce-Indextabellen im Speicher aufbewahrt werden können (konfigurieren Sie beispielsweise
innodb_buffer_pool_size
). -
Die Neuindizierung auf MariaDB 10.4 dauert im Vergleich zu anderen MariaDB- oder MySQL-Versionen länger. Siehe Best Practices für die Konfiguration.
-
-
Damit MySQL-
TIMESTAMP
den Voreinstellungen und der Komposition entsprechen, die von der deklarativen Schemaarchitektur des Programms erwartet werden, muss die Systemvariableexplicit_defaults_for_timestamp
aufon
gesetzt werden.Verweise:
Wenn diese Einstellung nicht aktiviert ist, meldet
bin/magento setup:db:status
immer, dass dieDeclarative Schema is not up to date
.
explicit_defaults_for_timestamp
Einstellung wird nicht mehr unterstützt. Mit dieser Einstellung werden veraltete ZEITSTEMPEL-Verhaltensweisen gesteuert, die in einer zukünftigen MySQL-Version entfernt werden. Wenn diese Verhaltensweisen entfernt werden, wird auch die explicit_defaults_for_timestamp
entfernt.explicit_defaults_for_timestamp
für MySQL (MariaDB) standardmäßig auf OFF eingestellt.Die Neuindizierung auf MariaDB 10.4 und 10.6 dauert im Vergleich zu früheren MariaDB- oder MySQL-Versionen länger. Um die Neuindizierung zu beschleunigen, empfehlen wir die folgenden MariaDB-Konfigurationsparameter festzulegen:
Wenn nach dem Upgrade auf MariaDB 10.6 eine Leistungsbeeinträchtigung auftritt, die nicht mit einer Indizierung in Zusammenhang steht, sollten Sie die --query-cache-type
aktivieren. Beispiel: --query-cache-type=ON
.
Vor einem Upgrade von Adobe Commerce in Cloud-Infrastrukturprojekten müssen Sie möglicherweise auch MariaDB aktualisieren (siehe Best Practices für MariaDB-Upgrades).
Beispiel:
- Adobe Commerce 2.4.6 mit MariaDB-Version 10.5.1 oder höher
- Adobe Commerce 2.3.5 mit MariaDB Version 10.3 oder früher
Zusätzlich zu diesen Empfehlungen sollten Sie sich mit Ihrem Datenbankadministrator über die Konfiguration der folgenden Parameter beraten: