Cet article décrit comment réparer les tables et les bases de données MySQL. Au fur et à mesure que les tables d'une base de données grandissent, des erreurs peuvent se produire de temps à autre. Lorsqu'ils le font, MySQL inclut plusieurs outils que vous pouvez utiliser pour vérifier et réparer les tables de base de données. Pour ce faire, suivez les procédures ci-dessous dans l'ordre dans lequel elles apparaissent.
Cet article s'applique uniquement aux produits répertoriés dans les Détails de l'article barre latérale. Vous devez disposer d'un accès root au serveur pour suivre ces procédures.Étape 1 :Sauvegarder les bases de données
Avant de tenter de réparer une base de données, vous devez d'abord la sauvegarder. Pour sauvegarder tous les fichiers de toutes vos bases de données, procédez comme suit :
- Connectez-vous à votre serveur à l'aide de SSH.
- Arrêtez le serveur MySQL à l'aide de la commande appropriée pour votre distribution Linux :
- Pour CentOS et Fedora, saisissez :
service mysqld stop
-
Pour Debian et Ubuntu, tapez :
service mysql stop
- Pour CentOS et Fedora, saisissez :
-
Tapez la commande suivante :
cp -rfv /var/lib/mysql /var/lib/mysql$(date +%s)
Cette commande copie tous les fichiers de toutes vos bases de données vers un nom de répertoire basé sur l'heure actuelle (plus précisément, le nombre de secondes écoulées depuis le 1er janvier 1970). Cela garantit que chaque sauvegarde de base de données est stockée dans un répertoire qui a un nom unique. Pour une protection supplémentaire, vous pouvez (et devriez) sauvegarder les fichiers de la base de données sur un emplacement distant ne se trouvant pas sur le serveur. -
Redémarrez le serveur MySQL en utilisant la commande appropriée pour votre distribution Linux :
- Pour CentOS et Fedora, saisissez :
service mysqld start
-
Pour Debian et Ubuntu, tapez :
service mysql start
- Pour CentOS et Fedora, saisissez :
Étape 2 :Exécuter mysqlcheck
Après avoir sauvegardé vos bases de données, vous êtes prêt à commencer le dépannage. Le mysqlcheck Le programme vous permet de vérifier et de réparer les bases de données pendant que MySQL est en cours d'exécution. Cette fonctionnalité est utile lorsque vous souhaitez travailler sur une base de données sans arrêter l'ensemble du service MySQL.
De plus, mysqlcheck fonctionne sur les tables qui utilisent les moteurs de base de données MyISAM ou InnoDB.
Pour plus d'informations sur la manière de déterminer le moteur de stockage utilisé par une table de base de données, veuillez consulter cet article.Pour utiliser mysqlcheck , suivez ces étapes :
- En tant qu'utilisateur root, saisissez la commande suivante :
cd /var/lib/mysql
-
Tapez la commande suivante en remplaçant database par le nom de la base de données que vous souhaitez vérifier :
mysqlcheck database
La commande précédente vérifie toutes les tables de la base de données spécifiée. Sinon, pour vérifier une table spécifique dans une base de données, tapez la commande suivante. Remplacez database par le nom de la base de données et remplacez table par le nom de la table que vous souhaitez vérifier :
mysqlcheck database table
-
Mysqlcheck vérifie la base de données et les tables spécifiées. Si une table passe la vérification, mysqlcheck affiche OK pour le tableau. Cependant, si mysqlcheck signale une erreur pour une table, tapez la commande suivante pour essayer de la réparer. Remplacez database par le nom de la base de données et table par le nom de la table :
mysqlcheck -r database table
- Si mysqlcheck ne parvient pas à réparer la table ou les tables, passez à la procédure suivante.
Étape 3 :Exécuter des diagnostics spécifiques au moteur
Si vous exécutez mysqlcheck ne résout pas le problème, l'étape suivante consiste à exécuter des diagnostics spécifiques au moteur utilisé par la ou les tables de la base de données. Suivez la procédure appropriée ci-dessous pour le moteur de stockage de base de données de votre table.
Pour plus d'informations sur la manière de déterminer le moteur de stockage utilisé par vos tables de base de données, veuillez consulter cet article.Réparer les tables MyISAM avec myisamchk
Si vous utilisez le moteur de stockage MyISAM pour une table, vous pouvez exécuter le myisamchk programme pour le réparer. Pour ce faire, suivez ces étapes :
Le myisamchk Le programme ne fonctionne que pour les tables qui utilisent le moteur de stockage MyISAM. Cela ne fonctionne pas pour le moteur InnoDB.- Arrêtez le serveur MySQL à l'aide de la commande appropriée pour votre distribution Linux :
- Pour CentOS et Fedora, saisissez :
service mysqld stop
-
Pour Debian et Ubuntu, tapez :
service mysql stop
- Pour CentOS et Fedora, saisissez :
-
Tapez la commande suivante :
cd /var/lib/mysql
- Passez au répertoire où se trouve la base de données. Par exemple, si la base de données s'appelle clients , tapez cd clients.
-
Tapez la commande suivante en remplaçant table par le nom de la table que vous souhaitez vérifier :
myisamchk table
Pour vérifier toutes les tables d'une base de données, tapez la commande suivante :
myisamchk *.MYI
Si la commande précédente ne fonctionne pas, vous pouvez essayer de supprimer les fichiers temporaires qui peuvent empêcher myisamchk de fonctionner correctement. Pour ce faire, revenez à /var/lib/mysql répertoire, puis tapez la commande suivante :
ls */*.TMD
Si des fichiers .TMD sont répertoriés, saisissez la commande suivante pour les supprimer :
rm */*.TMD
Essayez ensuite d'exécuter myisamchk à nouveau.
-
Pour essayer de réparer une table, tapez la commande suivante en remplaçant table avec le nom de la table que vous souhaitez réparer :
myisamchk --recover table
-
Redémarrez le serveur MySQL en utilisant la commande appropriée pour votre distribution Linux :
- Pour CentOS et Fedora, saisissez :
service mysqld start
-
Pour Debian et Ubuntu, tapez :
service mysql start
- Pour CentOS et Fedora, saisissez :
- Testez la ou les tables réparées.
Exécuter le processus de récupération InnoDB
Si vous utilisez le moteur de stockage InnoDB pour une table de base de données, vous pouvez exécuter le processus de récupération InnoDB. Pour ce faire, suivez ces étapes :
- Utilisez votre éditeur de texte préféré pour ouvrir my.cnf fichier sur votre serveur. L'emplacement de mon.cnf dépend de votre distribution Linux :
- Sur CentOS et Fedora, le my.cnf le fichier est situé dans /etc répertoire.
- Sur Debian et Ubuntu, le my.cnf le fichier est situé dans /etc/mysql répertoire.
- Dans le mon.cnf fichier, localisez le [mysqld] section.
-
Ajoutez la ligne suivante au [mysqld] section:
innodb_force_recovery=4
-
Enregistrez les modifications dans my.cnf fichier, puis redémarrez le serveur MySQL en utilisant la commande appropriée pour votre distribution Linux :
- Pour CentOS et Fedora, saisissez :
service mysqld restart
-
Pour Debian et Ubuntu, tapez :
service mysql restart
- Pour CentOS et Fedora, saisissez :
-
Tapez la commande suivante pour exporter toutes les bases de données vers databases.sql dossier:
mysqldump --all-databases --add-drop-database --add-drop-table --routines > databases.sql
-
Démarrez mysql programme, puis essayez de supprimer la ou les bases de données concernées à l'aide de la commande DROP DATABASE commande.
Si MySQL ne parvient pas à supprimer une base de données, vous pouvez la supprimer manuellement à l'étape 8 ci-dessous après avoir arrêté le serveur MySQL.
-
Arrêtez le serveur MySQL à l'aide de la commande appropriée pour votre distribution Linux :
- Pour CentOS et Fedora, saisissez :
service mysqld stop
-
Pour Debian et Ubuntu, tapez :
service mysql stop
- Pour CentOS et Fedora, saisissez :
-
Si vous n'avez pas pu supprimer une base de données à l'étape 6, tapez les commandes suivantes pour la supprimer manuellement. Remplacez database par le nom de la base de données que vous souhaitez supprimer :
cd /var/lib/mysql rm -rf database
Assurez-vous de ne pas supprimer le mysql ou performance_schema répertoires ! -
Utilisez votre éditeur de texte préféré pour ouvrir le my.cnf fichier sur votre serveur, puis commentez la ligne suivante dans le [mysqld] section comme indiqué :
#innodb_force_recovery=4
Cela désactive le mode de récupération InnoDB. -
Enregistrez les modifications dans my.cnf fichier, puis démarrez le serveur MySQL en utilisant la commande appropriée pour votre distribution Linux :
- Pour CentOS et Fedora, saisissez :
service mysqld start
-
Pour Debian et Ubuntu, tapez :
service mysql start
- Pour CentOS et Fedora, saisissez :
-
Tapez la commande suivante pour restaurer les bases de données à partir du fichier de sauvegarde que vous avez créé à l'étape 5 :
mysql < databases.sql
- Testez la base de données restaurée.
Plus d'informations
- Pour plus d'informations sur mysqlcheck , veuillez visiter https://dev.mysql.com/doc/refman/5.5/en/mysqlcheck.html.
- Pour plus d'informations sur myisamchk , veuillez visiter https://dev.mysql.com/doc/refman/5.5/en/myisamchk.html.