Directives générales concernant MySQL
Créé pour :
- Expérimenté
- Administration
- Développeur
Voir Configuration requise pour connaître les versions prises en charge de MySQL.
Adobe fortement vous recommande de respecter la norme suivante lors de la configuration de votre base de données :
- Adobe Commerce utilise déclencheurs de base de données MySQL pour améliorer l’accès à la base de données lors de la réindexation. Ils sont créés lorsque le mode d’indexeur est défini sur schedule. L’application ne prend en charge aucun déclencheur personnalisé dans la base de données, car les déclencheurs personnalisés peuvent introduire des incompatibilités avec les futures versions d’Adobe Commerce.
- Familiarisez-vous avec ces limites potentielles de déclencheur MySQL avant de continuer.
- Pour améliorer la posture de sécurité de votre base de données, activez le mode SQL
STRICT_ALL_TABLES
pour empêcher le stockage de valeurs de données non valides, ce qui peut entraîner des interactions de base de données indésirables. - Adobe Commerce ne prend pas en charge la réplication basée sur les instructions MySQL. Veillez à utiliser uniquement réplication basée sur les lignes.
CREATE TEMPORARY TABLE
dans les transactions, qui sont incompatibles avec les implémentations de base de données qui utilisent la réplication basée sur GTID, telles que les instances de deuxième génération Google Cloud SQL. Considérez MySQL pour Cloud SQL 8.0 comme une alternative.Installation de MySQL sur Ubuntu
Adobe Commerce 2.4 nécessite une installation correcte de MySQL 8.0. Suivez les liens ci-dessous pour obtenir des instructions sur l’installation de MySQL sur votre ordinateur.
Si vous prévoyez d’importer un grand nombre de produits, vous pouvez augmenter la valeur de max_allowed_packet
de 16 Mo par défaut, soit une valeur supérieure à la valeur par défaut.
max_allowed_packet
. Les clients Adobe Commerce sur les infrastructures cloud de Starter peuvent augmenter la valeur de en mettant à jour la configuration dans le fichier /etc/mysql/mysql.cnf
.Pour augmenter la valeur, ouvrez le fichier /etc/mysql/mysql.cnf
dans un éditeur de texte et recherchez la valeur de max_allowed_packet
. Enregistrez vos modifications dans le fichier mysql.cnf
, fermez l’éditeur de texte et redémarrez MySQL (service mysql restart
).
Pour vérifier éventuellement la valeur que vous définissez, saisissez la commande suivante à l’invite de mysql>
:
SHOW VARIABLES LIKE 'max_allowed_packet';
Ensuite, Configurer l’instance de base de données.
Modifications de MySQL 8
Pour Adobe Commerce 2.4, nous avons ajouté la prise en charge de MySQL 8.
Cette section décrit les modifications majeures apportées à MySQL 8 que les développeurs doivent connaître.
Suppression de la largeur pour les types entiers (remplissage)
La spécification de largeur d’affichage pour les types de données entiers (TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT) a été abandonnée dans MySQL 8.0.17. Les instructions qui incluent des définitions de type de données dans leur sortie n'affichent plus la largeur d'affichage pour les types entiers, à l'exception de TINYINT(1). Les connecteurs MySQL supposent que les colonnes TINYINT(1) proviennent de colonnes BOOLÉENNES. Cette exception leur permet de continuer à faire cette supposition.
Exemple
Décrire admin_user dans 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
lors de la mise à jour des CURRENT_TIMESTAMP
logdate
timestamp
NULL
lognum
smallint unsigned
0
À l'exception de TINYINT(1), toute marge intérieure entière (TINYINT > 1, SMALLINT, MEDIUMINT, INT, BIGINT) doit être supprimée du fichier db_schema.xml
.
Pour plus d’informations, voir https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-19.html#mysqld-8-0-19-feature.
Comportement par défaut d’ORDER BY
Avant la version 8.0, les entrées étaient triées en fonction de la clé étrangère. L’ordre de tri par défaut dépend du moteur utilisé.
Indiquez toujours un ordre de tri si votre code dépend d’un tri spécifique.
Qualificateurs ASC et DESC obsolètes pour GROUP BY
Depuis MySQL 8.0.13, les qualificateurs ASC
ou DESC
obsolètes pour les clauses GROUP BY
ont été supprimés. Les requêtes qui dépendaient auparavant du tri GROUP BY
peuvent produire des résultats différents des versions précédentes de MySQL. Pour générer un ordre de tri donné, fournissez une clause ORDER BY
.
Commerce et MySQL 8
Adobe Commerce a subi quelques modifications afin de prendre correctement en charge MySQL 8.
Comportement de requête et d’insertion
Adobe Commerce a désactivé le comportement de validation standard en définissant SET SQL_MODE='' dans /lib/internal/Magento/Framework/DB/Adapter/Pdo/Mysql.php:424.
. Lorsque la validation est désactivée, il est possible que MySQL tronque les données. Dans MySQL, le comportement de la requête a changé : Select * on my_table where IP='127.0.0.1'
ne renvoie plus de résultats, car l’adresse IP est désormais correctement vue comme une chaîne, plutôt que comme un entier.
Mise à niveau de MySQL 5.7 vers MySQL 8
Pour mettre correctement à jour MySQL de la version 5.7 à la version 8, vous devez suivre les étapes suivantes dans l’ordre :
-
Mettez à niveau Adobe Commerce vers la version 2.4.0.
Testez tout et assurez-vous que votre système fonctionne comme prévu. -
Activez le mode de maintenance :
bin/magento maintenance:enable
-
Effectuez une sauvegarde de la base de données :
bin/magento setup:backup --db
-
Mettez à jour MySQL vers la version 8.
-
Importez les données sauvegardées dans MySQL.
-
Nettoyez le cache :
bin/magento cache:clean
-
Désactivez le mode de maintenance :
bin/magento maintenance:disable
Paramétrer l'instance de base de données
Cette section explique comment créer une instance de base de données pour Adobe Commerce. Bien qu’une nouvelle instance de base de données soit recommandée, vous pouvez éventuellement installer Adobe Commerce avec une instance de base de données existante.
Pour configurer une instance de base de données MySQL, procédez comme suit :
-
Connectez-vous à votre serveur de base de données en tant qu'utilisateur.
-
Accédez à une invite de commande MySQL :
mysql -u root -p
-
Entrez le mot de passe de l'utilisateur MySQL
root
lorsque vous y êtes invité. -
Saisissez les commandes suivantes dans l’ordre indiqué pour créer une instance de base de données nommée
magento
avec le nom d’utilisateurmagento
:create database magento;
create user 'magento'@'localhost' IDENTIFIED BY 'magento';
GRANT ALL ON magento.* TO 'magento'@'localhost';
flush privileges;
-
Saisissez
exit
pour quitter l’invite de commande. -
Vérifiez la base de données :
mysql -u magento -p
Si le moniteur MySQL s’affiche, vous avez créé la base de données correctement. Si une erreur s’affiche, répétez les commandes précédentes.
-
Si votre serveur web et votre serveur de base de données se trouvent sur des hôtes différents, effectuez les tâches décrites dans cette rubrique sur l’hôte du serveur de base de données, puis consultez Configurer une connexion à la base de données MySQL distante.
Nous vous recommandons de configurer votre instance de base de données en fonction de votre activité. Lors de la configuration de votre base de données, tenez compte des points suivants :
-
Les indexeurs nécessitent des valeurs de
tmp_table_size
et demax_heap_table_size
plus élevées (par exemple, 64 millions). Si vous configurez le paramètrebatch_size
, vous pouvez ajuster cette valeur ainsi que les paramètres de taille de la table pour améliorer les performances de l’indexeur. Pour plus d’informations consultez leGuide d’optimisation . -
Pour des performances optimales, assurez-vous que toutes les tables d’index MySQL et Adobe Commerce peuvent être conservées en mémoire (par exemple, configurez
innodb_buffer_pool_size
). -
La réindexation sur MariaDB 10.4 prend plus de temps que les autres versions de MariaDB ou MySQL. Voir Bonnes pratiques de configuration.
-
-
Pour que les champs de
TIMESTAMP
MySQL suivent les préférences et la composition attendues par l’architecture de schéma déclaratif de l’application, la variable systèmeexplicit_defaults_for_timestamp
doit être définie suron
.Références :
Si ce paramètre n’est pas activé,
bin/magento setup:db:status
signale toujours que leDeclarative Schema is not up to date
.
explicit_defaults_for_timestamp
est obsolète. Ce paramètre contrôle les comportements TIMESTAMP obsolètes qui seront supprimés dans une prochaine version de MySQL. Lorsque ces comportements sont supprimés, le paramètre explicit_defaults_for_timestamp
est également supprimé.explicit_defaults_for_timestamp
de MySQL (MariaDB) est défini par défaut sur OFF.La réindexation sur MariaDB 10.4 et 10.6 prend plus de temps que les versions précédentes de MariaDB ou MySQL. Pour accélérer la réindexation, nous vous recommandons de définir les paramètres de configuration MariaDB suivants :
Si vous constatez une dégradation des performances non liée à l’indexation après la mise à niveau vers MariaDB 10.6, envisagez d’activer le paramètre --query-cache-type
. Par exemple, --query-cache-type=ON
.
Avant de mettre à niveau Adobe Commerce sur des projets d’infrastructure cloud, vous devrez peut-être également mettre à niveau MariaDB (voir Bonnes pratiques de mise à niveau de MariaDB).
Par exemple :
- Adobe Commerce 2.4.6 avec MariaDB version 10.5.1 ou ultérieure
- Adobe Commerce 2.3.5 avec MariaDB version 10.3 ou antérieure
Outre ces recommandations, contactez l’administrateur de votre base de données pour configurer les paramètres suivants :