Mysql otimizar uma tabela em todos os bancos de dados

1

Eu vejo no manual do mysqlcheck que há uma opção para - tabelas que sobrescrevem essa opção de banco de dados, mas não é bem explicada.

Estou tentando executar mysqlcheck -o e quero que ele otimize uma tabela específica que existe em todos os bancos de dados, mas apenas nessa tabela.

** Acho que posso não ter sido claro o suficiente

Eu tenho 250 bancos de dados que contêm a tabela api_log. Eu quero executar um único comando que irá otimizar apenas a tabela api_log, mas em todos os bancos de dados que o servidor mysql tem.

Por exemplo:

mysqlcheck -o --tables api_log -A

Obviamente, esse snippet específico não funciona, mas expressa o que eu gostaria de realizar. Eu não quero otimizar todas as tabelas em todos os bancos de dados, apenas uma tabela que existe em todos os 250 bancos de dados.

    
por Allen Sellars 08.11.2014 / 18:41

1 resposta

2

Você pode otimizar uma única tabela assim:

mysqlcheck -u root -o database_name table_name

por exemplo. este irá otimizar a tabela 'user' do banco de dados 'mysql'.

$ mysqlcheck -u root -o mysql user 
mysql.user                                         OK

editar

Para o caso em que você tem centenas de bancos de dados; você pode roteirizar este procedimento como

table_name='api_log'
mysql -NB -u root -e 'show databases' | while read db_name
do
  if mysql -NB -u root "$db_name" -e 'show tables' | egrep -wq "$table_name"; then
    echo "Optimizing $db_name.$table_name"
    mysqlcheck -u root -o "$db_name" "$table_name"
  fi
done

que irá interligar todos os bancos de dados e verificar se algum deles tem nome de tabela chamado 'api_log' se isso for feito, otimizará isso.

    
por 08.11.2014 / 20:40