Esse
ibdata1
não está encolhendo é um recurso particularmente irritante do MySQL. O ibdata1
arquivo não pode realmente 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á tanto. De acordo com comentário de Bill Karwin
a> isso é habilitado por padrão a partir da versão 5.6.6 do MySQL. Já faz um tempo que fiz isso. No entanto, para configurar seu servidor para usar arquivos separados para cada tabela, você precisa alterar
my.cnf
para habilitar isso:[mysqld]
innodb_file_per_table=1
https://dev.mysql .com/doc/refman/5.6/en/innodb-file-per-table-tablespaces.html
Como você deseja recuperar o espaço de
ibdata1
você realmente tem que excluir o arquivo:- Faça um
mysqldump
de todos os bancos de dados, procedimentos, gatilhos etc exceto omysql
eperformance_schema
bancos de dados - Retire todos os bancos de dados exceto os dois bancos de dados acima
- Parar o mysql
- Excluir
ibdata1
eib_log
arquivos - Iniciar mysql
- Restaurar do dump
Quando você inicia o MySQL na etapa 5, o
ibdata1
e ib_log
os arquivos serão recriados. Agora você está apto para ir. Ao criar um novo banco de dados para análise, as tabelas estarão localizadas em
ibd*
separadas arquivos, não em ibdata1
. Como você geralmente descarta o banco de dados logo depois, o ibd*
os 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
Usando o comando
ALTER TABLE <tablename> ENGINE=innodb
ou OPTIMIZE TABLE <tablename>
pode-se extrair dados e páginas de índice de ibdata1 para arquivos separados. No entanto, ibdata1 não diminuirá a menos que você execute as etapas acima. Em relação ao
information_schema
, que não é necessário nem possível descartar. 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 de banco de dados de memória e é descartado e regenerado na parada/reinicialização do mysqld. Consulte https://dev.mysql.com/doc/ refman/5.7/en/information-schema.html
.