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 :
ERROR 1016: Can't open file: 'table_name.MYI' (errno: 145)
Table ‘table_name’ is marked as crashed and should be repaired
Got error 28 from storage engine
ERROR 1030: Got error 127 from storage engine
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.
Create database corruptDB;
Use corruptdb;
CREATE TABLE corrupt_table (
id INT AUTO_INCREMENT PRIMARY KEY,
data VARCHAR(100)
) ENGINE=MyISAM;
J’ai ajouté un million de enregistrements à la table en exécutant la requête suivante.
INSERT INTO corrupt_table (data)
SELECT CONCAT('RandomData-', FLOOR(1000 + (RAND() * 9000)))
FROM corrupt_table;
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.
net stop MySQL
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.
net start MySQL
Une fois les services démarrés, exécutez la requête suivante sur la ligne de commande MySQL.
mysql> use corruptdb;
Database changed
mysql> select count(1) from corrupt_table;
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 :
CHECK TABLE [option]
Vous pouvez spécifier les différentes options.
QUICK
: Cette option vérifie rapidement et identifie les problèmes tels que les indexs corrompus.FAST
: Elle vérifie les tables qui ne sont pas fermées correctement.CHANGED
: Cette option vérifie uniquement les tables qui ont été modifiées après la dernière exécution deCHECK TABLE
.MEDIUM
: Cette option vérifie les enregistrements et vérifie que les liens entre la table et les données sont corrects.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.
CHECK TABLE corrupt_table
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 :
REPAIR TABLE [option]
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.
REPAIR TABLE corrupt_table
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 :
use corruptdb;
select count(1) from corrupt_table;
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 -u [username] -p [database_name] < [table_dump.sql]
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 -u root -p corruptdb < C:\MySQLData\Backup\corrupt_table.sql
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.
use corruptdb;
select count(1) from corrupt_table;
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