Directives générales pour MySQL
Voir Configuration requise pour connaître les versions prises en charge de MySQL.
Adobe strong vous recommande de respecter la norme suivante lors de la configuration de votre base de données :
- Adobe Commerce utilise les 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 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 versions futures d’Adobe Commerce.
- Familiarisez-vous avec les limites potentielles des déclencheurs MySQL avant de continuer.
- Pour améliorer la sécurité de votre base de données, activez le mode SQL
STRICT_ALL_TABLES
afin d'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 des instructions MySQL. Assurez-vous d’utiliser uniquement la réplication basée sur les lignes.
CREATE TEMPORARY TABLE
dans les transactions, qui sont incompatibles avec les mises en oeuvre de base de données utilisent la réplication basée sur GTID, telle que 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 propre de MySQL 8.0. Suivez les liens ci-dessous pour obtenir des instructions sur l’installation de MySQL sur votre machine.
Si vous prévoyez d’importer un grand nombre de produits, vous pouvez augmenter la valeur de max_allowed_packet
supérieure à la valeur par défaut, 16 Mo.
max_allowed_packet
. Les clients Adobe Commerce sur Cloud Infrastructure Starter peuvent augmenter la valeur 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 à une invite mysql>
:
SHOW VARIABLES LIKE 'max_allowed_packet';
Ensuite, Configurez 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 de MySQL 8 que les développeurs doivent connaître.
Largeur supprimée 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 des types entiers, à l’exception de TINYINT(1). Les connecteurs MySQL supposent que les colonnes TINYINT(1) sont issues de colonnes BOOLÉENNES. Cette exception leur permet de continuer à faire cette hypothèse.
Exemple
Description de admin_user sur 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 CURRENT_TIMESTAMP
logdate
timestamp
NULL
lognum
smallint unsigned
0
A l'exception de TINYINT(1), tous les entiers de remplissage (TINYINT > 1, SMALLINT, MEDIUMINT, INT, BIGINT) doivent être supprimés 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 COMMANDE PAR défaut
Avant la version 8.0, les entrées étaient triées par clé étrangère. L’ordre de tri par défaut dépend du moteur utilisé.
Spécifiez toujours un ordre de tri si votre code dépend d’un tri spécifique.
Qualificateurs ASC et DESC obsolètes pour GROUP BY
À compter de MySQL 8.0.13, les qualificateurs obsolètes ASC
ou DESC
pour les clauses GROUP BY
ont été supprimés. Les requêtes qui utilisaient auparavant le tri GROUP BY
peuvent produire des résultats différents des versions précédentes de MySQL. Pour produire un ordre de tri donné, fournissez une clause ORDER BY
.
Commerce et MySQL 8
Certaines modifications ont été apportées à Adobe Commerce pour prendre correctement en charge MySQL 8.
Comportement de requête et d’insertion
Adobe Commerce a désactivé le comportement de validation normal 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 considérée 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, procédez comme suit 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. -
Activer le mode de maintenance :
code language-bash bin/magento maintenance:enable
-
Sauvegarder une base de données :
code language-bash bin/magento setup:backup --db
-
Mettez à jour MySQL vers la version 8.
-
Importez les données sauvegardées dans MySQL.
-
Nettoyez le cache :
code language-bash bin/magento cache:clean
-
Désactiver le mode de maintenance :
code language-bash bin/magento maintenance:disable
Configuration de 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 :
-
Connectez-vous à votre serveur de base de données comme n’importe quel utilisateur.
-
Accédez à une invite de commande MySQL :
code language-bash mysql -u root -p
-
Saisissez 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
: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;
-
Saisissez
exit
pour quitter l’invite de commande. -
Vérification de la base de données :
code language-bash mysql -u magento -p
Si le moniteur MySQL s’affiche, vous avez correctement créé la base de données. 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 reportez-vous à la section Configuration d’une connexion à base de données MySQL distante.
Nous vous recommandons de configurer votre instance de base de données en fonction de vos besoins. Lors de la configuration de votre base de données, veuillez tenir compte des points suivants :
-
Les indexeurs requièrent des valeurs
tmp_table_size
etmax_heap_table_size
plus élevées (par exemple, 64 M). Si vous configurez le paramètrebatch_size
, vous pouvez ajuster cette valeur avec les paramètres de taille de tableau pour améliorer les performances de l’indexeur. Pour plus d’informations, consultez le Guide 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 de MySQL. Voir Bonnes pratiques de configuration.
-
-
Pour que les champs MySQL
TIMESTAMP
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
pour 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 de 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, consultez l’administrateur de la base de données pour configurer les paramètres suivants :