Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como reduzir/limpar o arquivo ibdata1 no MySQL


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:
  1. Faça um mysqldump de todos os bancos de dados, procedimentos, gatilhos etc exceto o mysql e performance_schema bancos de dados
  2. Retire todos os bancos de dados exceto os dois bancos de dados acima
  3. Parar o mysql
  4. Excluir ibdata1 e ib_log arquivos
  5. Iniciar mysql
  6. 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 .