MySQL est l'un des plus populaires open-source SGBDR (Systèmes de Gestion de Bases de Données Relationnelles). Il fait partie intégrante de la croissance rapide de la pile LAMP et a suscité un engouement impressionnant parmi les développeurs et les administrateurs système. Comparé aux bases de données non relationnelles, SQL offre d'excellentes fonctionnalités pour organiser, stocker et gérer efficacement les données. Les fonctionnalités distinctives d'organisation des tables et les capacités exceptionnelles de la base de données SQL en font un choix privilégié à tous les niveaux de l'organisation, qu'elle soit grande ou petite.
Les tables MySQL peuvent être endommagées en de rares occasions, ce qui indique qu'une telle erreur s'est produite et que les données qui y sont stockées sont illisibles. Lorsque vous essayez de lire des données à partir d'une table corrompue, le serveur plante et renvoie une erreur ou une liste d'erreurs.
Raisons potentielles de la corruption des tables MySQL
Voici quelques-unes des raisons les plus courantes de la corruption des tables :
- Le service MySQL plante après le redémarrage.
- La machine s'éteint de manière inattendue en raison d'une panne de courant.
- Mémoire défectueuse ou défaillance matérielle.
- Bugs logiciels dans l'système d'exploitation ou le code SQL.
- MySQL s'arrête pendant l'écriture.
- Le système se met HORS TENSION pendant la mise à jour de SQL.
Avant de réparer une table que vous soupçonnez d'être corrompue, créez une sauvegarde de votre répertoire de données. Cela permettra de réduire le risque de perte de données. Dans ce guide rapide, nous vous guiderons à travers les étapes de dépannage pour réparer les tables corrompues dans MySQL.
Prérequis
Pour suivre ce tutoriel, vous aurez besoin de ce qui suit :
- La dernière version d'Ubuntu installée sur votre système.
- Les utilisateurs du système doivent disposer des privilèges sudo.
- Si vous rencontrez des difficultés pour accéder à votre compte sudo, envisagez de modifier le mot de passe root MySQL.
- MySQL configuré sur votre serveur.
Étape 1 : Arrêter le service MySQL et sauvegarder les données
Dans un premier temps, arrêtez le service MySQL à l'aide de la commande systemctl :
|
1 |
sudo systemctl stop mysql |
Après avoir arrêté le service SQL, l'étape suivante consiste à créer des sauvegardes de tous les fichiers existants dans un nouveau répertoire. Utilisez le répertoire de données par défaut d'Ubuntu /var/lib/mysql/ pour copier toutes les données du système :
|
1 |
cp -r /var/lib/mysql /var/lib/mysql_bkp |
Étape 2 : Identifier l'erreur
Ensuite, nous allons commencer notre enquête et identifier la table corrompue. Si la table utilise le moteur de stockage MyISAM, utilisez l'instruction CHECK TABLE et vérifiez l'état de la table :
|
1 |
mysql> CHECK TABLE table_name; |
Vous verrez un message en sortie confirmant la ou les tables corrompues.
Étape 3 : Réparer la table corrompue
S'il y a une erreur sur la table MyISAM et que vous l'avez identifiée, utilisez l'instruction REPAIR TABLE pour corriger l'erreur :
|
1 |
mysql> REPAIR TABLE table_name; |
Si la réparation a réussi, vous devriez voir le message sans erreur suivant en sortie :
|
1 2 3 4 5 6 7 8 9 10 11 |
Sortie: +--------------------------+--------+----------+----------+ | Table | Op | Msg_type | Msg_text | +--------------------------+--------+----------+----------+ | database_name.table_name | repair | status | OK | +--------------------------+--------+----------+----------+ |
Cependant, si vous constatez que l'erreur réapparaît, suivez le document officiel de MySQL version 8.0 pour reconstruire ou réparer les tables.
Contrairement au moteur de stockage MyISAM, le processus InnoDB impliqué dans la réparation des tables est différent dans le moteur de stockage InnoDB. InnoDB est le moteur de stockage par défaut dans MySQL 8.0. Il dispose d'opérations de vérification et de réparation automatiques de la corruption. Le MySQL InnoDB vérifie les pages corrompues en effectuant des sommes de contrôle sur chaque page qu'il lit. Si une anomalie est détectée, il arrêtera automatiquement le serveur MySQL.
En fin de compte, il est rarement nécessaire de réparer les tables InnoDB. InnoDB dispose d'un mécanisme de récupération après plantage qui peut résoudre la plupart des problèmes grâce à un redémarrage.
Essayez de redémarrer le service MySQL pour voir si vous pouvez accéder au serveur :
|
1 |
sudo systemctl restart mysql |
Si vous ne parvenez pas à reconstruire une table InnoDB corrompue même après le redémarrage, essayez la méthode « Dump and Reload » suggérée dans la documentation de MySQL. Cette méthode consiste à récupérer l'accès à la table corrompue, en utilisant l'utilitaire mysqldump. Un dossier doit être créé pour stocker et conserver la sauvegarde logique de la table. Une fois l'erreur corrigée, elle recharge la table dans la base de données.
Étape 4 : Utiliser l'option innodb_force_recovery
Si le serveur reste planté ou inaccessible, essayez d'utiliser l'option force_recovery dans InnoDB. Le passage sur ON de l'option force_recovery est un excellent moyen de restaurer des bases de données MySQL. Vous pouvez activer cette option en modifiant le fichier mysqld.cnf dans l'éditeur de texte nano :
|
1 |
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf |
Insérez la ligne suivante sous la section [mysqld] :

Enregistrez et fermez le fichier après avoir redémarré le service MySQL.
Étape 5 : Créer un fichier mysqldump
Si vous pouvez accéder à la table corrompue, utilisez l'option mysqldump pour placer toutes les sauvegardes dans le nouveau fichier. Nommez le nouveau fichier selon vos préférences et veillez à ajouter l'extension .sql à la fin. Ici, nous nommons le fichier demo.sql:
|
1 |
mysqldump database_name table_name > demo.sql |
Après cela, utilisez la requête DROP TABLE pour supprimer la table de la base de données. Vous pouvez utiliser la syntaxe suivante pour éviter d'avoir à rouvrir l'invite MySQL :
|
1 |
mysql -u user -p --execute="DROP TABLE database_name.table_name" |
Ensuite, en utilisant le document de sauvegarde demo.sql que vous venez de préparer, restaurez la table :
|
1 |
mysql -u user -p --database=database_name < demo.sql |
Vous avez corrigé avec succès votre table MySQL corrompue et vous êtes prêt à travailler avec la base de données de manière transparente.
Conclusion
Des corruptions de tables ou des plantages système inattendus sont susceptibles de se produire si vous travaillez avec un volume important de données. Il convient de mentionner que le moteur de stockage MySQL InnoDB est plus tolérant aux pannes que le précédent moteur MyISAM. Les tables utilisant le moteur de stockage InnoDB peuvent toujours être corrompues, bien que le risque de corruption de table et de pannes soit considérablement réduit grâce à ses fonctionnalités de récupération automatique.
Enfin, il existe de nombreux sujets et tutoriels sur les bases de données que vous pouvez explorer sur notre blog:
- Comment installer MySQL sur CentOS 7
- Utilisateur MySQL — Créer et accorder des autorisations
- Configuration de la réplication dans MySQL sur Ubuntu
Bonne informatique !
Commentaires
Aucun commentaire pour l'instant. Soyez le premier.