Ripara tutte le tabelle in una volta


112

Come controllare tutte le tabelle nel database in una volta sola?

Piuttosto che digitare la query check table ''tablename'';per tutte le tabelle una per una.

C'è qualche comando semplice come check allo qualcosa del genere?

Risposte:



108

Il comando è questo:

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

È necessario fornire la password quando richiesto,

oppure puoi eseguire questo ma non è consigliato perché la password è scritta in chiaro:

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

7
mysqlcheck -u root -p --auto-repair --check --optimize --all-databases Errore: mysqlcheck non supporta più comandi contraddittori
Alekc

11
Se ottieni l'errore dei comandi contraddittori, elimina l'opzione --optimize.
Sarcastron

Immagino che tu debba usare una e solo una di queste opzioni: riparazione automatica, controllo o ottimizzazione. Ho usato solo la riparazione automatica e ho funzionato
Packet Tracer

Ho provato quello che hai detto ma ottengo: mysqlcheck: Errore ricevuto: 1045: Accesso negato per l'utente "root" @ "localhost" (utilizzando la password: SÌ) durante il tentativo di connessione e so che sto usando la password corretta.
Doug

24

Utilizzare la seguente query per stampare REPAIRle istruzioni SQL per tutte le tabelle all'interno di un database:

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

Dopodiché copia tutte le query ed eseguilo mydatabase.

Nota: sostituire mydatabasecon il nome DB desiderato


9

Non è necessario digitare la password, basta utilizzare uno qualsiasi di questi comandi (autoesplicativo):

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

8

Il seguente comando ha funzionato per me utilizzando il prompt dei comandi (come amministratore) in Windows:

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

Esegui mysqlcheck con l'utente root, richiedi una password, controlla tutti i database e ripara automaticamente le tabelle danneggiate.


3

Non esiste un comando predefinito per farlo, ma puoi creare una procedura per eseguire il lavoro. Itererà attraverso le righe di information_schemae chiamerà REPAIR TABLE 'tablename';per ogni riga. CHECK TABLEnon è ancora supportato per le dichiarazioni preparate. Ecco l'esempio (sostituisci MYDATABASE con il nome del tuo database):

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

Mi piace questo per un semplice controllo dalla 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
puoi usare mysql -ssper omettere i nomi delle colonne dall'output - questo consentirebbe di rimuovere NR != 1dal tuo codice
Fluffy

1

per gli host plesk, uno di questi dovrebbe fare: (entrambi fanno lo stesso)

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

1

Potresti aver bisogno di nome utente e password:

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

Ti verrà richiesta la password.

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

Se vuoi mettere cron, MA la tua password sarà visibile in testo normale!


1

Se le tabelle danneggiate rimangono dopo

mysqlcheck -A --auto-repair

provare

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

cosa fa -use-frm?
davidman77

--use-frm Per le operazioni di riparazione sulle tabelle MyISAM, ottenere la struttura della tabella dal dizionario dei dati in modo che la tabella possa essere riparata anche se l'intestazione .MYI è danneggiata. (cfr. dev.mysql.com/doc/refman/8.0/en/… )
Laloi
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.