Comment réparer des tables de base de données MySQL corrompues pas à pas

Dans le monde moderne, les entreprises ne dépendent pas uniquement d’une plateforme de serveur de base de données spécifique. Il existe de nombreuses plateformes de bases de données qui sont adéquates pour gérer des charges de travail moyennes et des exigences de haute disponibilité et de恢复 de catastrophes. MySQL est l’une de ces plateformes de base de données qui offrent de nombreuses fonctionnalités et une haute performance.

Comme d’autres SGBD, MySQL est également vulnérable à la corruption des bases de données et des tables. L’interruption récente causée par Microsoft et CrowdStrike a également touché les serveurs de base de données MySQL. En raison de défaillances du système d’exploitation, les tables de la base de données ou les bases de données entières se corrompent.

Dans cet article, je vais montrer comment nous pouvons corrompre et fixer une table de la base de données MySQL. Cet article est utile aux ADBs pour simuler les défaillances et les aider à déterminer la meilleure manière possible de restaurer ou réparer la table corrompue MySQL.

Comprendre la corruption de la base de données MySQL

La corruption de la base de données MySQL peut se manifester de diverses manières, y compris :

Tables indisponibles

La table entière ou une sous-partie spécifique de la table devient indisponible. Lorsque vous essayez d’accéder à la table corrompue, vous rencontrerez des erreurs qui indiquent la corruption du fichier d’index ou du fichier de données d’une table.

Erreurs d’incohérence des données

Si la table est corrompue, à la place de données significatives, votre requête peut renvoyer certaines valeurs aléatoires ou inconsistantes ou des résultats incomplets.

Arrêts imprévus

Dans certains cas, MySQL peut planter lors de l’accès à la table ou de l’utilisation de mysqldump pour les sauvegardes. J’ai rencontré cette erreur lors de la simulation d’un scénario de corruption. J’ai corrompu le fichier de données d’une table. Lorsque j’ai démarré le service, lorsque j’ai essayé d’accéder à la table en utilisant une instruction SELECT, le service MySQL s’est automatiquement planté.

Message d’erreur lors des opérations sur la base de données

Lors de l’accès à la table corrompue, vous pourriez rencontrer certaines erreurs telles que :

Plain Text

 

Ces erreurs indiquent que le fichier de données ou les fichiers d’index associés sont corrompus.

Il est crucial de comprendre la cause racine de la corruption pour éviter les occurrences futures et assurer l’intégrité des données.

Préalables au nettoyage des tables MySQL

Avant de tenter de procéder à des réparations, veillez à avoir les éléments suivants :

  • Backup complet de votre base de données MySQL
  • Espace disque suffisant
  • Accès administratif au serveur MySQL

Maintenant, simulatez la corruption de la table.

Corrompre la table MySQL.

Avant de nous plonger dans le processus de réparation de la base de données, il est utile de comprendre comment elle peut être corrompue. Pour la démonstration, j’ai créé une base de données nommée « CorruptDB » sur un serveur de base de données MySQL. J’ai également créé une table nommée corrupt_table dans la base de données CorruptDB.

Voici le code pour créer une base de données et une table.

MySQL

 

J’ai ajouté un million de enregistrements à la table en exécutant la requête suivante.

MySQL

 

Notez que la simulation de corruption de la table est effectuée sur mon ordinateur portable. Ne tentez pas cela en production, en développement ou dans tout autre environnement. La table que je utilise dans cette démonstration est créée avec l’engine de base de données MyISAM. Vous pouvez lire sur Moteurs de stockage alternatives pour en apprendre davantage sur les moteurs de base de données de MySQL Server.

J’ai effectué les étapes suivantes pour corrompre la table.

Étape 1 : Arrêter les services du serveur MySQL

Vous devez arrêter le serveur MySQL. Pour ce faire, exécutez PowerShell en tant que administrateur et exécutez la commande suivante.

Plain Text

 

Alternativement, vous pouvez également l’arrêter à partir des Services.

Étape 2 : Corrompre le fichier d’index de la table

Maintenant, nous devons corrompre le fichier d’index de la table. Lorsque vous créez n’importe quelle table dans le moteur de base de données MyISAM, trois fichiers sont créés lors de la création de la table en utilisant le moteur de base de données MyISAM.

  • Fichiers MYD : Ce fichier contient les données actuales.
  • Fichiers MYI : Ce fichier est un index.
  • Fichiers Frm : Le fichier contient une structure de table.

Nous corromprirons le fichier d’index. Les fichiers de données se trouvent à l’emplacement par défaut, qui est « C:\ProgramData\MySQL\MySQL Server 8.0\Data\corruptdb ». Pour la corruption, nous utilisons un éditeur hexadécimal.

Téléchargez et installez l’éditeur hexadécimal. Ouvrez les fichiers MYI en utilisant-le. Le fichier ressemble à l’image suivante :

Remplacez les 5 premiers octets par quelques valeurs aléatoires. Enregistrez le fichier et fermez l’éditeur.

Maintenant, lancez le service et essayez d’accéder à la table.

Étape 3 : Démarrer les Services MySQL et Accéder à la Table

Tout d’abord, démarrez les services MySQL en exécutant la commande suivante dans PowerShell.

Plain Text

 

Une fois les services démarrés, exécutez la requête suivante sur la ligne de commande MySQL.

MySQL

 

La requête a retourné l’erreur suivante :

L’erreur indique que l’index de la table corrupt_table a été corrompu et doit être réparé.

Méthodes Manuelles pour Reparer les tables MySQL

Il existe certaines méthodes que vous pouvez utiliser pour réparer la table MySQL corrompue. La première méthode est d’utiliser les commandes CHECK TABLE et REPAIR TABLE.

Commandes CHECK TABLE et REPAIR TABLE

Vous pouvez restaurer la table en utilisant les commandes internes CHECK TABLE et REPAIR TABLE de MySQL. Ces commandes sont utilisées pour diagnostiquer et réparer toute table MyISAM.

La commande de vérification de table vérifie l’intégrité de la table. Elle vérifie la structure de la table, les indexs et les données pour toute corruption et affiche les détails. La syntaxe est la suivante :

Plain Text

 

Vous pouvez spécifier les différentes options.

  1. QUICK : Cette option vérifie rapidement et identifie les problèmes tels que les indexs corrompus.
  2. FAST : Elle vérifie les tables qui ne sont pas fermées correctement.
  3. CHANGED : Cette option vérifie uniquement les tables qui ont été modifiées après la dernière exécution de CHECK TABLE.
  4. MEDIUM : Cette option vérifie les enregistrements et vérifie que les liens entre la table et les données sont corrects.
  5. EXTENDED : Cette option effectue une scan approfondi et vérifie la structure et le contenu de la table.

Dans ce démo, nous effectuerons un scan rapide. Voici la commande.

Plain Text

 

Capture d’écran :

Comme vous pouvez le voir dans la capture d’écran ci-dessus, l’erreur indique que l’index de la table corrupt_table est corrompu et nécessite une correction.

Nous utiliserons la commande REPAIR TABLE pour corriger la corruption dans la table. La commande REPAIR TABLE est utilisée pour récupérer la structure de la table et les données de la corruption, en particulier pour les tables qui utilisent le moteur de base de données MyISAM. En cas d’index de table corrompu, la commande REPAIR TABLE reconstruit les indexs.

La syntaxe de REPAIR TABLE est la suivante :

Plain Text

 

Vous pouvez spécifier les options suivantes :

  • QUICK : Il ne répare que le fichier d’index d’une table. Il ne consulte pas le fichier de données de la table.
  • the name of the database that contains the table that you want to restore from the backup.

    Voici la traduction :

    EXTENDED : Lorsque nous utilisons cette option, la commande effectue un réparation approfondie. Elle répare ou recrée également le fichier d’index en scannant tous les enregistrements de la table.

Dans cette démo, nous avons corrompu l’index de la table ; par conséquent, nous utiliserons l’option QUICK. Exécutez la commande suivante.

Plain Text

 

capture d’écran :

Comme vous pouvez le voir sur la capture d’écran ci-dessus, la corrupt_table a été réparée avec succès. Pour vérifier, exécutez la requête suivante sur MySQL Workbench : 

MySQL

 

Sortie de la requête :

Comme vous pouvez le voir, la table est maintenant accessible.

Restaurer la table à l’aide de la commande mysqldump

La deuxième méthode consiste à restaurer complètement la table à partir de la sauvegarde. Cette méthode peut être utilisée lorsque la table est fortement corrompue et ne peut pas être réparée à l’aide de la commande REPAIR TABLE

Pour restaurer une table MySQL à partir de la sauvegarde, vous pouvez utiliser la commande mysqldump. Vous pouvez lire l’article « mysqldump — Un programme de sauvegarde de base de données » pour en apprendre davantage sur l’utilisation de la commande mysqldump. La syntaxe pour restaurer la table est ci-dessous.

MySQL

 

Dans la syntaxe :

  • Nom d'utilisateur : Entrez le nom d’utilisateur que vous utilisez pour vous connecter à la base de données MySQL.
  • -p : Spécifiez le mot de passe. Si vous laissez le champ vide, MySQL demandera le mot de passe.
  • [nom_de_la_base] : Spécifiez le nom de la base de données dans laquelle vous souhaitez restaurer la table à partir de la sauvegarde.
  • Table_dump.sql : Spécifier le nom complet du fichier de sauvegarde.

Pour la démonstration, j’ai effectué une sauvegarde de la base de données CorruptDB située dans le répertoire C:\MySQLData\Backup.

Pour restaurer la table corrupt_table, nous pouvons utiliser la commande suivante.

MySQL

 

Une fois la commande exécutée avec succès, vous pourrez accéder à la table. Exécutez la requête suivante pour vérifier.

MySQL

 

Sortie de la requête :

Comme vous pouvez le voir dans l’image de capture d’écran ci-dessus, la table a été restaurée avec succès.

Avec phpMyAdmin

Vous pouvez également utiliser l’outil phpMyAdmin pour réparer toute base de données MySQL corrompue. phpMyAdmin est une interface graphique pour gérer et maintenir MySQL et MariaDB. Pour la démonstration, j’l’ai installé sur mon ordinateur portable.

  • Pour réparer la table, lancez phpMyAdmin et naviguez vers la base de données dans laquelle se trouve la table corrompue.
  • Dans la zone de droite, vous pouvez afficher la liste des tables créées dans la base de données CorruptDB.
  • Sélectionnez Corrupt_table dans la liste et sélectionnez l’option Réparer la table dans la liste déroulante.

Voici une capture d’écran pour référence :

Une fois la table réparée, vous pouvez voir que la status de la table corrupt_table est devenue OK. Voici la capture d’écran :

Conclusion

Dans cet article, nous avons appris les raisons possibles de la corruption de la base de données MySQL et comment les résoudre. J’ai expliqué le processus étape par étape pour corrompre des tables MySQL en utilisant un éditeur hexadécimal. J’ai également couvert la façon de les réparer en utilisant les commandes CHECK TABLE et REPAIR TABLE. Nous avons également appris comment restaurer la table en utilisant l’outil mysqldump

La réparation d’une table de base de données MySQL corrompue peut être difficile, mais avec les bonnes outils et méthodes, cela est gérable. Les méthodes manuelles fournissent une solution de base, tandis que phpMyAdmin offre une option de récupération complète et fiable. Assurez-vous toujours de faire des sauvegardes régulières et de maintenir la santé de votre base de données pour minimiser le risque de corruption.

Source:
https://dzone.com/articles/repair-corrupt-mysql-database-tables-step-by-step