Repare todas as tabelas de uma vez

112

Como verificar todas as tabelas do banco de dados de uma vez?

Em vez de digitar a consulta check table ''tablename'';para todas as tabelas, uma por uma.

Existe algum comando simples como check allou algo parecido?

AMD
fonte

Respostas:

108

O comando é este:

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

Você deve fornecer a senha quando solicitado,

ou você pode executar este, mas não é recomendado porque a senha é escrita em texto simples:

mysqlcheck -u root --password=THEPASSWORD --auto-repair --check --all-databases
Constantin Galbenu
fonte
7
mysqlcheck -u root -p --auto-repair --check --optimize --all-databases Erro: mysqlcheck não suporta múltiplos comandos contraditórios
Alekc
11
Se você obtiver o erro de comandos contraditórios, tire a opção --optimize.
Sarcastron
eu acho que você tem que usar uma e apenas uma dessas opções: auto-reparar, verificar ou otimizar. Usei apenas reparo automático e trabalhei
Packet Tracer
Tentei o que você disse, mas recebo: mysqlcheck: Erro obtido: 1045: Acesso negado para o usuário 'root' @ 'localhost' (usando senha: SIM) ao tentar conectar e sei que estou usando a senha correta.
Doug
24

Use a seguinte consulta para imprimir as REPAIRinstruções SQL para todas as tabelas dentro de um banco de dados:

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

Depois disso, copie todas as consultas e execute-as no mydatabase .

Nota: substitua mydatabasepelo nome do banco de dados desejado

SenthilKumar
fonte
9

Não há necessidade de digitar a senha, basta usar qualquer um destes comandos (autoexplicativo):

mysqlcheck --all-databases -a #analyze
mysqlcheck --all-databases -r #repair
mysqlcheck --all-databases -o #optimize
Sérvio louco
fonte
8

O seguinte comando funcionou para mim usando o prompt de comando (como administrador) no Windows:

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

Execute mysqlcheck com o usuário root, solicite uma senha, verifique todos os bancos de dados e repare automaticamente quaisquer tabelas corrompidas.

contactmatt
fonte
3

Não existe um comando padrão para fazer isso, mas você pode criar um procedimento para fazer o trabalho. Ele irá iterar por meio de linhas de information_schemae chamar REPAIR TABLE 'tablename';cada linha. CHECK TABLEainda não tem suporte para declarações preparadas. Aqui está o exemplo (substitua MYDATABASE pelo nome do seu banco de dados):

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
fonte
1

Eu gosto disso para uma verificação simples do shell:

mysql -p<password> -D<database> -B -e "SHOW TABLES LIKE 'User%'" \
| awk 'NR != 1 {print "CHECK TABLE "$1";"}' \
| mysql -p<password> -D<database>
Jerrygarciuh
fonte
1
você pode usar mysql -sspara omitir os nomes das colunas da saída - isso permitiria remover NR != 1do seu código
Fluffy
1

para hosts plesk, um destes deve fazer: (ambos fazem o mesmo)

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

Você pode precisar de nome de usuário e senha:

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

Será solicitada a senha.

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

Se você quiser colocar no cron, MAS sua senha ficará visível em texto simples!

Mike Zriel
fonte
1

Se as tabelas corrompidas permanecerem após

mysqlcheck -A --auto-repair

experimentar

mysqlcheck -A --auto-repair --use-frm
Laloi
fonte
o que o -use-frm faz?
davidman77
--use-frm Para operações de reparo em tabelas MyISAM, obtém a estrutura da tabela do dicionário de dados para que a tabela possa ser reparada mesmo se o cabeçalho .MYI estiver corrompido. (cf. dev.mysql.com/doc/refman/8.0/en/… )
Laloi