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?

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

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


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

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.


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

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>

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

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!


1

Jeśli uszkodzone tabele pozostaną po

mysqlcheck -A --auto-repair

próbować

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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.