Réponses:
à partir de la ligne de commande, vous pouvez utiliser:
mysqlcheck -A --auto-repair
La commande est la suivante:
mysqlcheck -u root -p --auto-repair --check --all-databases
Vous devez fournir le mot de passe lorsque vous y êtes invité,
ou vous pouvez exécuter celui-ci mais ce n'est pas recommandé car le mot de passe est écrit en texte clair:
mysqlcheck -u root --password=THEPASSWORD --auto-repair --check --all-databases
Utilisez la requête suivante pour imprimer des REPAIR
instructions SQL pour toutes les tables d'une base de données:
select concat('REPAIR TABLE ', table_name, ';') from information_schema.tables
where table_schema='mydatabase';
Après cela, copiez toutes les requêtes et exécutez-les mydatabase
.
Remarque: remplacez mydatabase
par le nom de base de données souhaité
La commande suivante a fonctionné pour moi en utilisant l'invite de commande (en tant qu'administrateur) dans Windows:
mysqlcheck -u root -p -A --auto-repair
Exécutez mysqlcheck avec l'utilisateur root, demandez un mot de passe, vérifiez toutes les bases de données et réparez automatiquement les tables corrompues.
Il n'y a pas de commande par défaut pour ce faire, mais vous pouvez créer une procédure pour faire le travail. Il parcourt les lignes de information_schema
et appelle REPAIR TABLE 'tablename';
chaque ligne. CHECK TABLE
n'est pas encore pris en charge pour les instructions préparées. Voici l'exemple (remplacez MYDATABASE par le nom de votre base de données):
CREATE DEFINER = 'root'@'localhost'
PROCEDURE MYDATABASE.repair_all()
BEGIN
DECLARE endloop INT DEFAULT 0;
DECLARE tableName char(100);
DECLARE rCursor CURSOR FOR SELECT `TABLE_NAME` FROM `information_schema`.`TABLES` WHERE `TABLE_SCHEMA`=DATABASE();
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET endloop=1;
OPEN rCursor;
FETCH rCursor INTO tableName;
WHILE endloop = 0 DO
SET @sql = CONCAT("REPAIR TABLE `", tableName, "`");
PREPARE statement FROM @sql;
EXECUTE statement;
FETCH rCursor INTO tableName;
END WHILE;
CLOSE rCursor;
END
J'aime ceci pour une simple vérification depuis le shell:
mysql -p<password> -D<database> -B -e "SHOW TABLES LIKE 'User%'" \
| awk 'NR != 1 {print "CHECK TABLE "$1";"}' \
| mysql -p<password> -D<database>
mysql -ss
pour faire omettre les noms de colonnes de la sortie - cela permettrait de supprimer NR != 1
de votre code
Vous aurez peut-être besoin d'un nom d'utilisateur et d'un mot de passe:
mysqlcheck -A --auto-repair -uroot -p
Vous serez invité à entrer le mot de passe.
mysqlcheck -A --auto-repair -uroot -p{{password here}}
Si vous souhaitez mettre en cron, MAIS votre mot de passe sera visible en texte brut!
Si des tables corrompues restent après
mysqlcheck -A --auto-repair
essayer
mysqlcheck -A --auto-repair --use-frm