Recuperar espaço em disco após excluir o banco de dados Magento MySQL

5

Eu precisava recuperar algum espaço em disco, então removi um antigo banco de dados Magento do meu servidor. O tamanho do banco de dados estava em torno de 16 GB. Fiquei surpreso que uma vez que o banco de dados foi excluído, ele realmente não liberou esse espaço em disco.

Eu tentei reiniciar o servidor MySQL, mas ele ainda está ocupando esse espaço.

Se for importante, um banco de dados Magento usa muito o innoDB.

Há algo que eu possa fazer para recuperar esse espaço em disco?

    
por Josh Pennington 20.07.2012 / 15:45

2 respostas

8

Eu escrevi um procedimento de limpeza para o InnoDB no StackOverflow

link (29 de outubro de 2010)

Aqui está

Para encolher o ibdata1 de uma vez por todas, você deve fazer o seguinte:

1) MySQLDump todos os bancos de dados em um arquivo de texto SQL (chamá-lo SQLData.sql)

2) Solte todos os bancos de dados (exceto o esquema mysql)

3) Desligamento do mysql

4) Adicione as seguintes linhas ao /etc/my.cnf

[mysqld]
innodb_file_per_table
innodb_flush_method=O_DIRECT
innodb_log_file_size=1G
innodb_buffer_pool_size=4G

Sidenote: Seja qual for o seu conjunto para innodb_buffer_pool_size, certifique-se de innodb_log_file_size é 25% de innodb_buffer_pool_size.

5) Exclua ibdata1, ib_logfile0 e ib_logfile1

Neste ponto, deve haver apenas o esquema mysql em / var / lib / mysql

6) Reinicie o mysql

Isso irá recriar ibdata1 em 10MB, ib_logfile0 e ib_logfile1 em 1G cada

7) Recarregue o SQLData.sql no mysql

ibdata1 crescerá, mas conterá apenas metadados de tabela

Cada tabela InnoDB existirá fora do ibdata1

Suponha que você tenha uma tabela InnoDB chamada mydb.mytable. Se você entrar em / var / lib / mysql / mydb, você verá dois arquivos representando a tabela

  • mytable.frm (cabeçalho do mecanismo de armazenamento)
  • mytable.ibd (Início de dados de tabela e índices de tabela para mydb.mytable)

ibdata1 nunca mais conterá dados e índices InnoDB.

Com a opção innodb_file_per_table em /etc/my.cnf, você pode executar OPTIMIZE TABLE mydb.mytable e o arquivo /var/lib/mysql/mydb/mytable.ibd irá encolher.

Eu fiz isso muitas vezes na minha carreira como DBA MySQL

Na verdade, na primeira vez que fiz isso, recolhi um arquivo ibdata1 de 50 GB em 500 MB.

Experimente. Se você tiver mais dúvidas sobre isso, envie-me um email. Confie em mim. Isso funcionará no curto prazo e no longo prazo. !!!

    
por 20.07.2012 / 21:16
1
Atualmente, a única maneira de recuperar o espaço usado por um banco de dados InnoDB perdido é despejar todos os bancos de dados, parar o MySQL, excluir os arquivos de armazenamento subjacentes, reiniciar o MySQL e, finalmente, importar o dump do banco de dados.

A documentação do MySQL tem mais informações sobre isso.

    
por 20.07.2012 / 15:54