Lors de la restauration d’un Backup sur un autre site, une erreur peut survenir :
« Could not restore query. MySQL has returned the error code 1118, with message ‘Row size too large (> 8126)’ »
Ou alternativement,
« Your server reached the maximum row size of the table »
Ce problème est causé par InnoDB qui a atteint la taille de ligne maximale et ne peut plus stocker de données.
Contents
Cause racine
La cause racine de ce problème est que le moteur de base de données MySQL/MariaDB (InnoDB) a une limite de taille de ligne maximale. Lorsque cette limite est dépassée, le moteur de base de données ne peut plus stocker de données dans cette ligne. Cette limite est typiquement rencontrée lors de l’importation de grands ensembles de données ou lorsque la structure de la table inclut de grands champs VARCHAR.
Étapes générales pour résoudre l’erreur « Row size too large »
En général, les étapes pour corriger cela sont :
- Remplacer les champs de table TEXT ou BLOB au lieu d’utiliser de grands VARCHAR.
- Changer le ROW_FORMAT de la table en DYNAMIC.
- Définir innodb_strict_mode sur off.
Comme ces étapes impliquent des modifications de configuration du serveur et l’altération de la structure des tables WordPress, elles ne sont généralement pas recommandées en raison du risque de perte de données et d’autres problèmes.
Utiliser un filtre pour faire fonctionner la restauration du Backup
Notre objectif est d’importer les données SQL du fichier de Backup vers le site actuel. Pour atteindre cet objectif, nous désactivons innodb_strict_mode pendant le processus de restauration.
Lorsque cette erreur se produit, tu peux ajouter le code ci-dessous dans un Plugin Must-Use (MU-plugin) pour désactiver le innodb_strict_mode :
<?php
add_filter('wpstg.backup.restore.innodbStrictModeOff', '__return_true');Instructions étape par étape
- Connecte-toi à ton site WordPress via FTP ou le Gestionnaire de fichiers de ton panneau de contrôle d’hébergement.
- Navigue vers le répertoire :
wp-content/mu-plugins. Si le répertoiremu-pluginsn’existe pas, crée-le. - Dans le répertoire
mu-plugins, crée un nouveau fichier PHP. Tu peux le nommer comme tu le souhaites, par exempledisable-innodb-strict-mode.php. - Modifie le fichier PHP nouvellement créé et ajoutes-y le code suivant :
<?php
add_filter('wpstg.backup.restore.innodbStrictModeOff', '__return_true');- Enregistre et ferme le fichier. Ce code s’exécutera à chaque chargement de page, garantissant que le
innodb_strict_modeest désactivé pendant le processus de restauration. - Relance le processus de restauration depuis ton Plugin de Backup. L’erreur ne devrait plus se produire.
Note importante
Il s’agit d’une solution de contournement pour ignorer la limite de taille de ligne MySQL pendant le processus de restauration. Ce n’est pas une solution permanente au problème, car avoir le innodb_strict_mode désactivé peut entraîner des problèmes potentiels d’intégrité des données. Après le processus de restauration, envisage de supprimer le MU-plugin ou de désactiver le filtre, et consulte un expert en base de données pour une solution plus permanente au problème de limite de taille de ligne.