IMPORTANT ! La réparation manuelle d’une table corrompue peut fonctionner, mais elle comporte un risque de perte de données. Si vous ne pouvez pas prendre le risque de perdre des données, essayez de restaurer la base de données à partir d’une sauvegarde récente. Toutefois, si la sauvegarde n’est pas la plus récente, vous risquez de perdre encore plus de données. Vous pouvez éviter le risque de perte de données lorsque vous réparez des tables InnoDB (ou MyISAM) corrompues en utilisant le logiciel Stellar Repair for MySQL. Il permet de récupérer les données des tables corrompues ou endommagées dans leur format d’origine en quelques clics seulement.
InnoDB est le MySQL storage engine utilisé par défaut dans MySQL 5.5 et les versions ultérieures. Il est également connu comme un moteur de stockage sûr en cas de crash (par opposition à MyISAM), en raison de sa capacité à récupérer les données après un crash. Cependant, dans certaines circonstances, il semble que la table InnoDB puisse être corrompue. Dans ce cas, les données contenues dans la table deviennent illisibles. De plus, une table corrompue peut entraîner une corruption du fichier InnoDB.
Quelles sont les causes de la corruption des tables InnoDB dans MySQL ?
Voici quelques raisons qui peuvent entraîner la corruption de la table :
- Le service MySQL se bloque après le redémarrage
- Le serveur MySQL redémarre automatiquement
- Une panne de courant ou une mauvaise mémoire arrête le serveur MySQL lors de l’écriture dans une table de base de données.
- Il y a un bug dans le système d’exploitation ou dans le code MySQL.
- Défaillance du matériel
- La machine sur laquelle MySQL est exécuté est arrêtée de manière inattendue.
Vous pouvez rencontrer le problème de corruption de la table InnoDB plus fréquemment sous Windows OS lorsque la base de données fonctionne dans un environnement virtualisé. Voyons maintenant comment diagnostiquer et réparer la table InnoDB dans MySQL.
Avant de commencer
Essayez d’identifier précisément ce à quoi vous avez affaire. Cela vous aidera à résoudre le problème InnoDB de manière plus efficace, sans perdre de temps à chercher d’autres méthodes.
Pour diagnostiquer les problèmes liés à InnoDB, procédez comme suit :
1. Analyser le journal du serveur MySQL
Si vous soupçonnez ou constatez une corruption dans les tables InnoDB, examinez le journal des erreurs du serveur MySQL pour trouver des informations pertinentes sur des erreurs InnoDB spécifiques. Le journal des erreurs vous aidera à comprendre :
- Si la table est corrompue en raison d’une corruption de la page de la base de données. Une page corrompue dans la base de données MySQL peut entraîner la corruption d’une table.
- Si l’échec est dû à un blocage, exécutez la commande innodb_print_all_deadlocks. Les détails de tous les blocages InnoDB seront imprimés dans le journal des erreurs du serveur MySQL.
- Si vous rencontrez des problèmes de défaillance du dictionnaire de données InnoDB, vous devrez résoudre les erreurs “inability to open .InnoDB files”, “failed CREATE TABLE statement” et “system cannot find the path specified” (le système ne trouve pas le chemin spécifié). La résolution de ces erreurs permettra d’accéder au dictionnaire de données InnoDB.
2. Vérifier l’absence d’erreurs dans le tableau
Bien que la consultation du journal des erreurs MySQL puisse vous aider à identifier une corruption, il se peut que vous ayez des difficultés à déterminer quelle table a été affectée par cette corruption. Vous pouvez vérifier les erreurs de la table InnoDB en utilisant deux méthodes. Cependant, la méthode à utiliser dépend du fait que le serveur MySQL est en cours d’exécution ou qu’il est hors ligne ou en panne.
- Si le serveur est en cours d’exécution, utilisez la commande CHECK TABLE pour rechercher les erreurs dans la table InnoDB.
mysql> CHECK TABLE nom_table ;
- Si le serveur est hors ligne ou s’est écrasé, utilisez la fonction Innochecksum pour vérifier les erreurs de corruption de page sur une table InnoDB.
shell> innochecksum [options] nom_de_fichier
InnoDB est doté d’un mécanisme de récupération en cas de panne qui permet de réparer et de récupérer automatiquement les tables de la base de données en cas de panne. Vous pouvez également utiliser la méthode “Dump and Reload” pour reconstruire une ou plusieurs tables corrompues. Toutefois, en cas de corruption grave, il peut être difficile de redémarrer le serveur MySQL. Vous devrez donc réparer manuellement le fichier InnoDB dans MySQL qui contient la table corrompue.
Remarque : avant de tenter de réparer une corruption de fichier InnoDB causée par une table corrompue, effectuez une restauration à partir d’une sauvegarde récente. Si la copie de sauvegarde est corrompue ou s’il ne s’agit pas de la copie la plus récente, suivez les étapes décrites ci-dessous.
Suivez la procédure étape par étape pour réparer une table InnoDB corrompue.
Remarque : veillez à sauvegarder le fichier InnoDB avant d’exécuter la procédure de réparation afin d’éviter d’endommager davantage les données de la table.
Étape 1 : Essayez de redémarrer le service MySQL et vérifiez si vous pouvez accéder au serveur. Pour ce faire, procédez comme suit :
- Appuyez simultanément sur les touches ‘Windows’ et ‘R’.
- Dans la boîte de dialogue qui apparaît, tapez services.msc, puis appuyez sur Entrée.
- Dans la boîte de dialogue Services, recherchez le service MySQL et faites un clic droit dessus, puis cliquez sur arrêter, démarrer ou redémarrer le service.
Si vous ne pouvez pas accéder au serveur, il peut être utile de forcing InnoDB recovery. Pour cela, activez l’option ‘innodb_force_recovery‘ dans le fichier de configuration MySQL my.cnf en procédant comme suit :
- Ouvrez le fichier de configuration, et dans la section [mysqld], ajoutez la ligne suivante :
[mysqld]
innodb_force_recovery=1
- Sauvegardez et fermez le fichier my.cnf.
- Essayez de redémarrer le service MySQL.
- Si vous pouvez accéder à la table corrompue, extrayez les données de la table à l’aide de la commande mysqldump :
mysqldump -u user -p nom_base nom_table > single_dbtable_dump.sql
Vous pouvez extraire plusieurs tables séparées par des espaces dans la commande ci-dessus.
- Ensuite, supprimez la table de la base de données :
mysql -u user -p -execute=”DROP TABLE nom_de_la_base.nom_de_la_table”
- Essayez maintenant de restaurer la table en utilisant le fichier dump nouvellement créé :
mysql -u user -p < single_dbtable_dump.sql
Étape 2 : Arrêtez le service MySQL, puis désactivez le mode de récupération InnoDB. Pour cela, entrez la ligne suivante dans la section [mysqld] :
#innodb_force_recovery=…
Étape 3 : Enregistrez les modifications apportées au fichier my.cnf et redémarrez le service MySQL à l’aide de la commande suivante :
service mysqld start
Restaurez la table de la base de données à partir du dump (c’est-à-dire du fichier de sauvegarde) que vous venez de créer.
Que faire lorsque les conseils manuels de dépannage InnoDB ne parviennent pas à récupérer les données ?
Si vous rencontrez des difficultés lors de la réparation manuelle des tables InnoDB de la base de données MySQL ou si l’un des composants de la base de données semble manquant, vous pouvez essayer le MySQL repair software pour réparer et restaurer les tables InnoDB corrompues.
Principales caractéristiques de Stellar Repair for MySQL
- Récupère tous les objets de la base de données, y compris les tables, les clés, les types de données, les propriétés des tables, les déclencheurs, les vues, etc.
- Répare les tables InnoDB et MyISAM.
- Peut traiter tous les types d’erreurs de corruption de MySQL, telles que la corruption de l’espace de tables InnoDB, le fichier de base de données manquant, la corruption du fichier d’index MySQL, etc.
- Répare les bases de données MySQL créées sur les systèmes Windows (10, 8.1, 8, 7, Vista & XP) et Linux.
- Prend en charge le traitement par lots des fichiers de base de données MySQL corrompus simultanément en une seule tentative.
Conclusion
La réparation manuelle d’une table InnoDB corrompue peut entraîner la perte de données. Par conséquent, si vous ne pouvez pas risquer de perdre des données, utilisez le logiciel Stellar Repair for MySQL pour réparer la table InnoDB corrompue dans MySQL. Le logiciel aide à réparer la table de base de données corrompue et récupère les propriétés de la table, les contraintes de relation et les clés.
Une fois que vous avez corrigé la corruption du fichier InnoDB, suivez les meilleures pratiques suivantes pour prévenir la corruption d’InnoDB.
- Une bonne pratique consiste à regrouper les ensembles associés aux tâches DML dans des transactions. Pour ce faire, les opérations DML peuvent être mises entre parenthèses avec les instructions START TRANSACTION et COMMIT.
- Lorsque vous utilisez les colonnes les plus fréquemment interrogées, indiquez la clé primaire pour chaque table. Vous pouvez également utiliser une valeur d’auto-incrémentation au cas où il n’existe pas de clé primaire.
- Activez l’option innodb_file_per_table pour placer les index et les données des tables individuelles dans des fichiers distincts.
- Si le problème persiste avec le moteur indiqué dans la clause ENGINE= de CREATE TABLE, exécutez le serveur avec l’option -sql_mode=NO_ENGINE_SUBSTITUTION pour éviter que les tables ne soient formulées avec un moteur de stockage différent.
- Il est conseillé de ne pas utiliser l’instruction LOCK TABLES et d’utiliser la syntaxe SELECT … FOR UPDATE pour déverrouiller les lignes à mettre à jour afin d’obtenir un accès exclusif en écriture à un ensemble de lignes. InnoDB a la capacité de gérer simultanément plusieurs sessions d’écriture en lecture sur la même table.
- Exécuter MySQL Server à partir de l’invite de commande lors de la résolution de problèmes Innodb plutôt qu’à partir du service Windows ou de mysqld_safe.
- Assurez-vous que les moniteurs InnoDB sont activés pour obtenir des informations sur le problème existant. Si le problème persistant est lié aux performances et que le serveur se bloque, assurez-vous d’activer le moniteur standard pour imprimer les informations relatives à l’état interne d’InnoDB. Sinon, activez les moniteurs de verrouillage si le problème semble concerner les verrous.
Was this article helpful?