Eu tenho uma tabela MySQL usando o mecanismo de armazenamento InnoDB; contém cerca de 2 milhões de linhas de dados. Quando excluí as linhas de dados da tabela, ele não libera espaço em disco alocado. O tamanho do arquivo ibdata1 também não foi reduzido após a execução do optimize table
comando.
Existe alguma maneira de recuperar espaço em disco do MySQL?
Estou em uma situação ruim; esse aplicativo está sendo executado em cerca de 50 locais diferentes e agora o problema de pouco espaço em disco está aparecendo em quase todos eles.
mysql
innodb
delete-row
Sumit Deo
fonte
fonte
innodb_file_per_table
está desativado. A boa notícia é que essa opção éon
por padrão nas versões recentes do MySQL.Respostas:
O MySQL não reduz o tamanho do ibdata1. Sempre. Mesmo se você usar
optimize table
para liberar o espaço usado nos registros excluídos, ele será reutilizado posteriormente.Uma alternativa é configurar o servidor para uso
innodb_file_per_table
, mas isso exigirá um backup, descarte do banco de dados e restauração. O lado positivo é que o arquivo .ibd da tabela é reduzido após umoptimize table
.fonte
ALTER TABLE t ENGINE=INNODB
na tabela existente. " Isso implica que você pode ativar esse recurso, "converter" as tabelas existentes para usar um arquivo InnoDB separado com o comando ALTER TABLE e, em seguida, OTIMIZAR a tabela para diminuir seu tamanho. No entanto, quando você estiver pronto você tem que descobrir como excluir o (enorme) arquivo InnoDB fonte ...Só tive o mesmo problema.
O que acontece é que, mesmo se você soltar o banco de dados, o innodb ainda não liberará espaço em disco. Eu tive que exportar, parar o mysql, remover os arquivos manualmente, iniciar o mysql, criar banco de dados e usuários e depois importar. Graças a Deus eu só tinha 200 MB de linhas, mas poupou 250 GB de arquivo innodb.
Falhar por design.
fonte
Se você não usar innodb_file_per_table , é possível recuperar espaço em disco, mas é muito tedioso e requer uma quantidade significativa de tempo de inatividade.
O How To é bastante aprofundado - mas colei a parte relevante abaixo.
Também mantenha uma cópia do seu esquema no seu dump.
fonte
Dez anos depois e eu tive o mesmo problema. Eu resolvi da seguinte maneira:
Isso é tudo :)
fonte
Outra maneira de resolver o problema da recuperação de espaço é: criar várias partições dentro da tabela - Partições baseadas em intervalo, baseadas em valor e simplesmente soltar / truncar a partição para recuperar o espaço, o que liberará o espaço usado por dados inteiros armazenados na partição específica.
Haverá algumas alterações necessárias no esquema da tabela quando você introduzir o particionamento para sua tabela como - Chaves Exclusivas, Índices para incluir a coluna da partição etc.
fonte
No ano passado, eu também enfrentei o mesmo problema na versão mysql5.7 e o ibdata1 ocupava 150 Gb. então eu adicionei desfazer espaços de tabela
Tome backup do Mysqldump
Pare o serviço mysql
Remova todos os dados do diretório de dados
Adicione abaixo do parâmetro de espaço de tabela desfazer no my.cnf atual
Iniciar o mysql service
store mysqldump backup
Problema resolvido !!
fonte
Existem várias maneiras de recuperar o espaço em disco após excluir os dados da tabela para o mecanismo MySQL Inodb
Se você não usa innodb_file_per_table desde o início, despejar todos os dados, excluir todos os arquivos, recriar banco de dados e importar dados novamente é apenas uma maneira (verifique as respostas do FlipMcF acima)
Se você estiver usando innodb_file_per_table, tente
fonte