Congelamento do banco de dados MySQL após 'uso'

17

Recentemente, cometi um erro estúpido e corrompi minha instalação do Ubuntu. Para resolvê-lo, inicializei com um live cd e copiei os arquivos do banco de dados. No entanto, agora eu copiei as pastas da instalação antiga para a nova, sempre que digito "use database_name", ele congela:

mysql> use my_database_name;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

E então congela sem dar o terminal.

Matthew Haworth
fonte

Respostas:

28

No primeiro comando "use" após o login, o MySQL verifica o nome do banco de dados, tabelas e colunas para conclusão automática. Se você tiver muitos bancos de dados, as tabelas podem demorar um pouco.

Para evitar isso, inicie seu cliente com a opção -A (ou --no-auto-rehash)

mysql -uroot -p -A

Você também pode adicionar a variável disable_auto_rehash no seu my.cnf (na seção [mysql]) se quiser desativá-la completamente. Essa alteração não requer uma reinicialização (é uma variável cliente, não servidor,).

Maxime Fouilleul
fonte
"um tempo" pode demorar mais de um dia para um banco de dados de ~ 2,5 GiB ou isso é excessivamente longo?
Lucidbrot 31/07/19
2

No meu caso, as "Informações da tabela de leitura" estavam demorando muito tempo. Quando corri mysql -e 'show processlist', descobri que o processo "travado" era "Aguardando bloqueio de metadados da tabela". Isso fazia algum sentido, pois eu tinha uma consulta de longa duração do formulário em create table from select ...execução em outro lugar, então, em um nível, eu pude entender que até que a nova tabela terminasse de ser criada, os metadados sobre as tabelas não estariam disponíveis. (Acho que seria preferível que a verificação de preenchimento automático omitisse quaisquer tabelas "incompletas" da consulta de metadados, se isso fosse possível.)

wwkudu
fonte
0

📌

Quando você copia o banco de dados inteiro de outro sistema:

/ var / lib / mysql / *

Você pode exibir -R mysql: mysql / var / lib / mysql / * e iniciar o serviço novamente.

☝ isso resolveu meu problema 👊

Rafael Lemos
fonte
2
Bem-vindo ao DBA Stack Exchange! Você formatou isso como uma citação; se você realmente obteve essa solução de outro lugar, deve fornecer a fonte . Caso contrário, remova a formatação.
Glorfindel