Allgemeine MySQL-Richtlinien
Unter Systemanforderungen finden Sie unterstützte Versionen von MySQL.
Adobe strong empfiehlt, beim Einrichten der Datenbank den folgenden Standard zu beachten:
- Adobe Commerce verwendet MySQL-Datenbank-Trigger, um den Datenbankzugriff während der Neuindizierung zu verbessern. Diese werden erstellt, wenn der Indexmodus auf schedule festgelegt ist. Das Programm unterstützt keine benutzerdefinierten Trigger in der Datenbank, da benutzerdefinierte Trigger Inkompatibilitäten mit zukünftigen Adobe Commerce-Versionen verursachen können.
- Machen Sie sich mit diesen möglichen Einschränkungen für MySQL-Trigger vertraut, bevor Sie fortfahren.
- Um die Sicherheit Ihrer Datenbank zu verbessern, aktivieren Sie den SQL-Modus
STRICT_ALL_TABLES
, um zu verhindern, dass ungültige Datenwerte gespeichert werden, was zu unerwünschten Datenbankinteraktionen führen kann. - Adobe Commerce unterstützt nicht die auf MySQL-Anweisungen basierende Replikation. Stellen Sie sicher, dass Sie die Zeilenbasierte Replikation nur 🔗 verwenden.
CREATE TEMPORARY TABLE
-Anweisungen innerhalb von Transaktionen, die inkompatibel mit Datenbankimplementierungen sind und die GTID-basierte Replikation verwenden, z. B. Google Cloud SQL-Instanzen der zweiten Generation. Betrachten Sie als Alternative MySQL für Cloud SQL 8.0.Installieren von MySQL auf Ubuntu
Für Adobe Commerce 2.4 ist eine saubere Installation von MySQL 8.0 erforderlich. Folgen Sie den unten stehenden Links, um Anweisungen zur Installation von MySQL auf Ihrem Computer zu erhalten.
Wenn Sie erwarten, dass eine große Anzahl von Produkten importiert wird, können Sie den Wert für max_allowed_packet
erhöhen, der größer als der Standardwert (16 MB) ist.
max_allowed_packet
-Wert zu erhöhen. Kunden von Adobe Commerce on Cloud Infrastructure Starter können den Wert erhöhen, indem sie die Konfiguration in der Datei /etc/mysql/mysql.cnf
aktualisieren.Um den Wert zu erhöhen, öffnen Sie die Datei /etc/mysql/mysql.cnf
in einem Texteditor und suchen Sie den Wert für max_allowed_packet
. Speichern Sie Ihre Änderungen in der Datei "mysql.cnf
", schließen Sie den Texteditor und starten Sie MySQL (service mysql restart
) neu.
Geben Sie den folgenden Befehl an einer mysql>
-Eingabeaufforderung ein, um optional den von Ihnen festgelegten Wert zu überprüfen:
SHOW VARIABLES LIKE 'max_allowed_packet';
Konfigurieren Sie dann die Datenbankinstanz.
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 kennen sollten.
Die Breite für ganzzahlige Typen wurde entfernt (Umrandung)
Die Spezifikation der Anzeigebreite für ganzzahlige Datentypen (TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT) ist in MySQL 8.0.17 nicht mehr enthalten. Anweisungen, die Datentypdefinitionen in ihrer Ausgabe enthalten, zeigen die Anzeigebreite für ganzzahlige Typen nicht mehr an, mit Ausnahme von TINYINT(1). MySQL Connectors gehen davon aus, dass die TINYINT(1)-Spalten als BOOLEAN-Spalten stammen. Diese Ausnahme ermöglicht es ihnen, diese Annahme fortzusetzen.
Beispiel
Beschreiben Sie 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
bei Update CURRENT_TIMESTAMP
logdate
timestamp
NULL
lognum
smallint unsigned
0
Mit Ausnahme von TINYINT(1) sollten alle Ganzzahlabstände (TINYINT > 1, SMALLINT, MEDIUMINT, INT, BIGINT) aus der Datei db_schema.xml
entfernt werden.
Weitere Informationen finden Sie unter https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-19.html#mysqld-8-0-19-feature.
Standardreihenfolge nach Verhalten
Vor 8.0 wurden Einträge nach 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ängig ist.
Veraltete ASC- und DESC-Qualifikatoren für GRUPPE BY
Ab MySQL 8.0.13 wurden die veralteten ASC
- oder DESC
-Qualifikatoren für GROUP BY
-Klauseln entfernt. Abfragen, die zuvor auf eine Sortierung mit dem Wert GROUP BY
zurückgegriffen haben, können zu Ergebnissen führen, die sich von früheren MySQL-Versionen unterscheiden. Um eine bestimmte Sortierreihenfolge zu erstellen, geben Sie eine ORDER BY
-Klausel an.
Commerce und MySQL 8
Es wurden einige Änderungen an Adobe Commerce vorgenommen, um MySQL 8 ordnungsgemäß zu unterstützen.
Verhalten bei Abfrage und Einfügen
Adobe Commerce hat das reguläre Validierungsverhalten deaktiviert, indem SET SQL_MODE='' in /lib/internal/Magento/Framework/DB/Adapter/Pdo/Mysql.php:424.
festgelegt wurde. Wenn die Validierung deaktiviert ist, ist es möglich, dass MySQL Daten abschneidet. In MySQL hat sich das Verhalten der Abfrage geändert: Select * on my_table where IP='127.0.0.1'
gibt keine Ergebnisse mehr zurück, da die IP-Adresse jetzt ordnungsgemäß als Zeichenfolge und nicht als Ganzzahl betrachtet wird.
Upgrade 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 ausführen, um die richtige Reihenfolge zu wählen:
-
Aktualisieren Sie Adobe Commerce auf 2.4.0.
Testen Sie alles und stellen Sie sicher, dass Ihr System wie erwartet funktioniert. -
Wartungsmodus aktivieren:
code language-bash bin/magento maintenance:enable
-
Erstellen Sie eine Datenbanksicherung:
code language-bash bin/magento setup:backup --db
-
Aktualisieren Sie MySQL auf Version 8.
-
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 empfohlen wird, eine neue Datenbankinstanz zu installieren, können Sie optional Adobe Commerce mit einer vorhandenen Datenbankinstanz installieren.
Konfigurieren einer MySQL-Datenbankinstanz:
-
Melden Sie sich bei Ihrem Datenbankserver als ein 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 angezeigten 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. -
Datenbank überprüfen:
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 Ihr Datenbankserver auf unterschiedlichen Hosts befinden, führen Sie die in diesem Thema beschriebenen Aufgaben auf dem Datenbankserverhost aus und lesen Sie dann den Abschnitt Einrichten einer Remote-MySQL-Datenbankverbindung.
Es wird empfohlen, Ihre Datenbankinstanz entsprechend Ihrem Unternehmen zu konfigurieren. Beachten Sie bei der Konfiguration Ihrer Datenbank Folgendes:
-
Indexer erfordern höhere Werte für
tmp_table_size
undmax_heap_table_size
(z. B. 64 M). Wenn Sie den Parameterbatch_size
konfigurieren, können Sie diesen Wert zusammen mit den Einstellungen für die Tabellengröße anpassen, um die Indexleistung zu verbessern. Weitere Informationen finden Sie im Optimierungshandbuch . -
Um eine optimale Leistung zu erzielen, stellen Sie sicher, dass alle MySQL- und Adobe Commerce-Indextabellen im Speicher aufbewahrt werden können (z. B.
innodb_buffer_pool_size
konfigurieren). -
Die Neuindizierung auf MariaDB 10.4 nimmt im Vergleich zu anderen MariaDB- oder MySQL-Versionen mehr Zeit in Anspruch. Siehe Best Practices für die Konfiguration.
-
-
Damit MySQL
TIMESTAMP
-Felder den Voreinstellungen und Kompositionen entsprechen, die von der deklarativen Schemaarchitektur der Anwendung 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 dasDeclarative Schema is not up to date
.
explicit_defaults_for_timestamp
wird nicht mehr unterstützt. Diese Einstellung steuert veraltete TIMESTAMP-Verhaltensweisen, die in einer zukünftigen MySQL-Version entfernt werden. Wenn diese Verhaltensweisen entfernt werden, wird auch die Einstellung 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 nimmt im Vergleich zu früheren MariaDB- oder MySQL-Versionen mehr Zeit in Anspruch. Um die Neuindizierung zu beschleunigen, empfehlen wir, diese MariaDB-Konfigurationsparameter festzulegen:
Wenn die Leistung nach der Aktualisierung auf MariaDB 10.6 nicht mit der Indexierung in Zusammenhang steht, sollten Sie die Einstellung --query-cache-type
aktivieren. Beispiel: --query-cache-type=ON
.
Vor der Aktualisierung von Adobe Commerce auf Cloud-Infrastrukturprojekten müssen Sie möglicherweise auch MariaDB aktualisieren (siehe Best Practices für die MariaDB-Aktualisierung).
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 an Ihren Datenbankadministrator wenden, um die folgenden Parameter zu konfigurieren: