Napraw wszystkie tabele za jednym razem

112

Jak sprawdzić wszystkie tabele w bazie danych za jednym razem?

Zamiast wpisywać zapytanie check table ''tablename'';dla wszystkich tabel jeden po drugim.

Czy jest jakieś proste polecenie check alllub coś takiego?

AMD
źródło

Odpowiedzi:

108

Polecenie jest takie:

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

Na żądanie musisz podać hasło,

lub możesz uruchomić ten, ale nie jest to zalecane, ponieważ hasło jest zapisane zwykłym tekstem:

mysqlcheck -u root --password=THEPASSWORD --auto-repair --check --all-databases
Constantin Galbenu
źródło
7
mysqlcheck -u root -p --auto-repair --check --optimize --all-databases Błąd: mysqlcheck nie obsługuje wielu sprzecznych poleceń
Alekc
11
Jeśli otrzymujesz błąd sprzecznych poleceń, wyłącz opcję --optimize.
Sarcastron,
Myślę, że musisz użyć jednej i tylko jednej z tych opcji: automatyczna naprawa, sprawdzenie lub optymalizacja. Użyłem tylko automatycznej naprawy i działałem
Packet Tracer,
Wypróbowałem to, co powiedziałeś, ale otrzymuję: mysqlcheck: Błąd: 1045: Odmowa dostępu dla użytkownika „root” @ „localhost” (przy użyciu hasła: TAK) podczas próby połączenia i wiem, że używam prawidłowego hasła.
Doug
24

Użyj następującego zapytania, aby wydrukować REPAIRinstrukcje SQL dla wszystkich tabel w bazie danych:

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

Następnie skopiuj wszystkie zapytania i wykonaj je na mydatabase.

Uwaga: zastąp mydatabaseżądaną nazwą bazy danych

SenthilKumar
źródło
9

Nie musisz wpisywać hasła, po prostu użyj jednego z następujących poleceń (oczywiste):

mysqlcheck --all-databases -a #analyze
mysqlcheck --all-databases -r #repair
mysqlcheck --all-databases -o #optimize
Szalony Serb
źródło
8

Następujące polecenie działało dla mnie przy użyciu wiersza polecenia (jako administrator) w systemie Windows:

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

Uruchom mysqlcheck z użytkownikiem root, zapytaj o hasło, sprawdź wszystkie bazy danych i automatycznie napraw wszystkie uszkodzone tabele.

contactmatt
źródło
3

Nie ma domyślnego polecenia, które mogłoby to zrobić, ale możesz utworzyć procedurę wykonującą to zadanie. Będzie przechodzić przez wiersze information_schemai wywoływać REPAIR TABLE 'tablename';każdy wiersz. CHECK TABLEnie jest jeszcze obsługiwany dla przygotowanych wyciągów. Oto przykład (zamień MYDATABASE na nazwę swojej bazy danych):

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
St.Woland
źródło
1

Podoba mi się to dla prostego sprawdzenia z powłoki:

mysql -p<password> -D<database> -B -e "SHOW TABLES LIKE 'User%'" \
| awk 'NR != 1 {print "CHECK TABLE "$1";"}' \
| mysql -p<password> -D<database>
jerrygarciuh
źródło
1
możesz użyć mysql -ssdo pominięcia nazw kolumn w wynikach - pozwoliłoby to usunąć NR != 1z twojego kodu
Fluffy
1

w przypadku hostów plesk jedno z nich powinno wystarczyć: (oba robią to samo)

mysqlrepair -uadmin -p$(cat /etc/psa/.psa.shadow) -A
# or
mysqlcheck -uadmin -p$(cat /etc/psa/.psa.shadow) --repair -A
sjas
źródło
1

Możesz potrzebować nazwy użytkownika i hasła:

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

Zostaniesz poproszony o podanie hasła.

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

Jeśli chcesz umieścić w cronie, ALE twoje hasło będzie widoczne w postaci zwykłego tekstu!

Mike Zriel
źródło
1

Jeśli uszkodzone tabele pozostaną po

mysqlcheck -A --auto-repair

próbować

mysqlcheck -A --auto-repair --use-frm
Laloi
źródło
co robi -use-frm?
davidman77
--use-frm W przypadku operacji naprawczych na tabelach MyISAM pobierz strukturę tabeli ze słownika danych, aby można było naprawić tabelę, nawet jeśli nagłówek .MYI jest uszkodzony. (por. dev.mysql.com/doc/refman/8.0/en/… )
Laloi