Reparieren Sie alle Tische auf einmal


111

Wie überprüfe ich alle Tabellen in der Datenbank auf einmal?

Anstatt die Abfrage check table ''tablename'';für alle Tabellen einzeln einzugeben .

Gibt es einen einfachen Befehl check alloder ähnliches?

Antworten:



107

Der Befehl lautet:

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

Sie müssen das Passwort angeben, wenn Sie dazu aufgefordert werden.

oder Sie können dieses ausführen, es wird jedoch nicht empfohlen, da das Kennwort im Klartext geschrieben ist:

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

7
mysqlcheck -u root -p --auto -paratur --check --optimieren --all-datenbanken Fehler: mysqlcheck unterstützt nicht mehrere widersprüchliche Befehle
Alekc

11
Wenn Sie den Fehler "Widersprüchliche Befehle" erhalten, deaktivieren Sie die Option --optimize.
Sarcastron

Ich denke, Sie müssen nur eine dieser Optionen verwenden: Autoreparatur, Überprüfung oder Optimierung. Ich habe nur Autoreparatur verwendet und gearbeitet
Packet Tracer

Ich habe versucht, was Sie gesagt haben, aber ich erhalte: mysqlcheck: Fehler: 1045: Zugriff für Benutzer 'root' @ 'localhost' (mit Kennwort: YES) verweigert, wenn versucht wurde, eine Verbindung herzustellen, und ich weiß, dass ich das richtige Kennwort verwende.
Doug

24

Verwenden Sie die folgende Abfrage, um REPAIRSQL-Anweisungen für alle Tabellen in einer Datenbank zu drucken :

select concat('REPAIR TABLE ', table_name, ';') from information_schema.tables 
where table_schema='mydatabase'; 

Danach kopieren Sie alle Abfragen und führen sie aus mydatabase.

Hinweis: Durch den mydatabasegewünschten DB-Namen ersetzen


9

Sie müssen das Passwort nicht eingeben, verwenden Sie einfach einen der folgenden Befehle (selbsterklärend):

mysqlcheck --all-databases -a #analyze
mysqlcheck --all-databases -r #repair
mysqlcheck --all-databases -o #optimize

8

Der folgende Befehl funktionierte für mich über die Eingabeaufforderung (als Administrator) in Windows:

mysqlcheck -u root -p -A --auto-repair

Führen Sie mysqlcheck mit dem Root-Benutzer aus, geben Sie ein Kennwort ein, überprüfen Sie alle Datenbanken und reparieren Sie beschädigte Tabellen automatisch.


3

Es gibt keinen Standardbefehl, um dies zu tun, aber Sie können eine Prozedur erstellen, um den Job auszuführen. Es wird durch Zeilen von durchlaufen information_schemaund REPAIR TABLE 'tablename';für jede Zeile aufrufen . CHECK TABLEwird für vorbereitete Anweisungen noch nicht unterstützt. Hier ist das Beispiel (ersetzen Sie MYDATABASE durch Ihren Datenbanknamen):

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

1

Ich mag dies für eine einfache Überprüfung von der Shell:

mysql -p<password> -D<database> -B -e "SHOW TABLES LIKE 'User%'" \
| awk 'NR != 1 {print "CHECK TABLE "$1";"}' \
| mysql -p<password> -D<database>

1
Sie können verwenden mysql -ss, um Spaltennamen aus der Ausgabe wegzulassen - dies würde es ermöglichen, NR != 1aus Ihrem Code zu entfernen
Fluffy

1

Für plesk-Hosts sollte eine davon Folgendes tun: (beide tun dasselbe)

mysqlrepair -uadmin -p$(cat /etc/psa/.psa.shadow) -A
# or
mysqlcheck -uadmin -p$(cat /etc/psa/.psa.shadow) --repair -A

1

Möglicherweise benötigen Sie Benutzername und Passwort:

mysqlcheck -A --auto-repair -uroot -p

Sie werden zur Eingabe des Passworts aufgefordert.

mysqlcheck -A --auto-repair -uroot -p{{password here}}

Wenn Sie cron eingeben möchten, ABER Ihr Passwort wird im Klartext angezeigt!


1

Wenn beschädigte Tabellen nach bleiben

mysqlcheck -A --auto-repair

Versuchen

mysqlcheck -A --auto-repair --use-frm

was macht der -use-frm?
Davidman77

--use-frm Rufen Sie für Reparaturvorgänge an MyISAM-Tabellen die Tabellenstruktur aus dem Datenwörterbuch ab, damit die Tabelle auch dann repariert werden kann, wenn der .MYI-Header beschädigt ist. (vgl. dev.mysql.com/doc/refman/8.0/en/… )
Laloi
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.