Isso ibdata1
não está diminuindo, é um recurso particularmente irritante do MySQL. Na ibdata1
verdade, o arquivo não pode ser reduzido a menos que você exclua todos os bancos de dados, remova os arquivos e recarregue um despejo.
Mas você pode configurar o MySQL para que cada tabela, incluindo seus índices, seja armazenada como um arquivo separado. Dessa forma ibdata1
, não crescerá tão grande. De acordo com o comentário de Bill Karwin, isso é ativado por padrão a partir da versão 5.6.6 do MySQL.
Foi há um tempo atrás que eu fiz isso. No entanto, para configurar o servidor para usar arquivos separados para cada tabela, é necessário alterar my.cnf
para permitir isso:
[mysqld]
innodb_file_per_table=1
http://dev.mysql.com/doc/refman/5.5/en/innodb-multiple-tablespaces.html
Como você deseja recuperar o espaço, na ibdata1
verdade você precisa excluir o arquivo:
- Fazer um
mysqldump
de todos os bancos de dados, procedimentos, gatilhos etc , exceto o mysql
e performance_schema
bancos de dados
- Descarte todos os bancos de dados, exceto os 2 bancos de dados acima
- Pare o mysql
- Excluir
ibdata1
e ib_log
arquivos
- Inicie o mysql
- Restaurar do despejo
Quando você inicia o MySQL na etapa 5, os arquivos ibdata1
e ib_log
serão recriados.
Agora você está pronto para ir. Quando você cria um novo banco de dados para análise, as tabelas serão localizadas em ibd*
arquivos separados , e não em ibdata1
. Como você geralmente descarta o banco de dados logo depois, os ibd*
arquivos serão excluídos.
http://dev.mysql.com/doc/refman/5.1/en/drop-database.html
Você provavelmente já viu isso:
http://bugs.mysql.com/bug.php?id=1341
Ao usar o comando ALTER TABLE <tablename> ENGINE=innodb
ou OPTIMIZE TABLE <tablename>
se pode extrair dados e páginas de índice de ibdata1 para arquivos separados. No entanto, ibdata1 não será reduzido a menos que você execute as etapas acima.
Em relação ao information_schema
, isso não é necessário nem possível cair. Na verdade, é apenas um monte de visualizações somente leitura, não tabelas. E não há arquivos associados a eles, nem mesmo um diretório de banco de dados. O informations_schema
está usando o mecanismo db de memória e é descartado e regenerado após a parada / reinicialização do mysqld. Consulte https://dev.mysql.com/doc/refman/5.7/en/information-schema.html .