116 votes

Réparer toutes les tables en une seule fois

quelqu'un peut-il me dire comment vérifier toutes les tables dans la base de données en une seule fois

plutôt que de taper la requête de consulter le tableau "tablename"; - pour toutes les tables une par une.

Je veux dire, est-il une simple commande comme tous les cocher ou quelque chose comme ça?

167voto

Gu1234 Points 1768

à partir de la ligne de commande vous pouvez utiliser:

mysqlcheck -A --auto-repair

http://dev.mysql.com/doc/refman/5.0/en/mysqlcheck.html

117voto

C-tin Gică Points 229

La commande est:

mysqlcheck -u root -p --auto-repair --check --optimize --all-databases

Vous devez fournir le mot de passe lors de la demande,

ou vous pouvez exécuter celui-ci, mais il n'est pas recommandé parce que le mot de passe est écrit en texte clair:

mysqlcheck -u root --password=THEPASSWORD --auto-repair --check --optimize --all-databases

26voto

SenthilKumar Points 67
select concat('repair table ', table_name, ';') from information_schema.tables 
where table_schema='mydatabase';

Pour 'mabase' utiliser votre nom DB.

3voto

St.Woland Points 3574

Il n'y a pas de commande par défaut de le faire, mais vous pouvez créer une procédure pour faire le travail. Il réitérera à travers les rangées d' information_schema et appelez - REPAIR TABLE 'tablename'; pour chaque ligne. CHECK TABLE n'est pas encore pris en charge pour les requêtes préparées. Voici l'exemple (remplacer MABASE avec votre nom de 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X