Allgemeine MySQL-Richtlinien
Siehe Systemanforderungen für unterstützte MySQL-Versionen.
Adobe stark empfiehlt bei der Einrichtung der Datenbank die Einhaltung des folgenden Standards:
- Adobe Commerce verwendet MySQL-Datenbank-Trigger , um den Datenbankzugriff während der Neuindizierung zu verbessern. Diese werden erstellt, wenn der Indexmodus auf Zeitplan. 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 Diese möglichen Einschränkungen für MySQL Trigger bevor Sie fortfahren.
- Aktivieren Sie zur Erhöhung der Datenbanksicherheit die
STRICT_ALL_TABLES
SQL-Modus, um zu verhindern, dass ungültige Datenwerte gespeichert werden, was zu unerwünschten Datenbankinteraktionen führen kann. - Adobe Commerce not Unterstützung der auf MySQL-Anweisungen basierenden Replikation. Stellen Sie sicher, dass Sie only row-basierte Replikation.
CREATE TEMPORARY TABLE
Anweisungen innerhalb von Transaktionen, die inkompatibel bei Datenbankimplementierungen die GTID-basierte Replikation verwenden, z. B. Instanzen der zweiten Generation von Google Cloud SQL. 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 mit dem Import einer großen Anzahl von Produkten rechnen, können Sie den Wert für max_allowed_packet
größer als der Standardwert ist, 16 MB.
max_allowed_packet
-Wert. Kunden von Adobe Commerce on Cloud Infrastructure Starter können den Wert erhöhen, indem sie die Konfiguration in /etc/mysql/mysql.cnf
-Datei.Um den Wert zu erhöhen, öffnen Sie die /etc/mysql/mysql.cnf
in einem Texteditor und suchen Sie nach dem 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
).
Geben Sie den folgenden Befehl an einer mysql>
Eingabeaufforderung:
SHOW VARIABLES LIKE 'max_allowed_packet';
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 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 Aktualisierung CURRENT_TIMESTAMP
logdate
timestamp
NULL
lognum
smallint unsigned
0
Außer für TINYINT(1), sollten alle Ganzzahlabstände (TINYINT > 1, SMALLINT, MEDIUMINT, INT, BIGINT) aus dem db_schema.xml
-Datei.
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 wird die veraltete ASC
oder DESC
Qualifikatoren für GROUP BY
-Klauseln entfernt. Abfragen, die zuvor verwendet wurden GROUP BY
-Sortierung kann zu Ergebnissen führen, die sich von früheren MySQL-Versionen unterscheiden. Um eine bestimmte Sortierreihenfolge zu erstellen, geben Sie eine ORDER BY
-Klausel.
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.
. 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
-
MySQL eingeben
root
das Kennwort des Benutzers bei Aufforderung. -
Geben Sie die folgenden Befehle in der angezeigten Reihenfolge ein, um eine Datenbankinstanz mit dem Namen
magento
mit Benutzernamemagento
: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;
-
Eingabe
exit
, 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. Informationen dazu finden Sie unter Eine Remote-Verbindung zur MySQL-Datenbank einrichten.
Es wird empfohlen, Ihre Datenbankinstanz entsprechend Ihrem Unternehmen zu konfigurieren. Beachten Sie bei der Konfiguration Ihrer Datenbank Folgendes:
-
Indexer erfordern höher
tmp_table_size
undmax_heap_table_size
Werte (z. B. 64 M). Wenn Sie diebatch_size
-Parameter können Sie diesen Wert zusammen mit den Einstellungen für die Tabellengröße anpassen, um die Indexleistung zu verbessern. Siehe Abschnitt Optimierungshandbuch für weitere Informationen. -
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 nimmt im Vergleich zu anderen MariaDB- oder MySQL-Versionen mehr Zeit in Anspruch. Siehe Best Practices bei der Konfiguration.
-
-
Für MySQL
TIMESTAMP
Felder, die den Voreinstellungen und der Zusammensetzung entsprechen, die von der deklarativen Schemaarchitektur der Anwendung, der Systemvariablen, erwartet werdenexplicit_defaults_for_timestamp
muss aufon
.Verweise:
Wenn diese Einstellung nicht aktiviert ist,
bin/magento setup:db:status
meldet immer, dass dieDeclarative Schema is not up to date
.
explicit_defaults_for_timestamp
eingestellt wurde. Diese Einstellung steuert veraltete TIMESTAMP-Verhaltensweisen, die in einer zukünftigen MySQL-Version entfernt werden. Wenn diese Verhaltensweisen entfernt werden, wird die explicit_defaults_for_timestamp
-Einstellung ebenfalls entfernt.explicit_defaults_for_timestamp
-Einstellung für MySQL (MariaDB) standardmäßig auf OFF.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 Option --query-cache-type
-Einstellung. Beispiel: --query-cache-type=ON
.
Vor der Aktualisierung von Adobe Commerce auf Cloud-Infrastrukturprojekten müssen Sie möglicherweise auch MariaDB (Weitere Informationen finden Sie unter 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: