Como faço para liberar dados apagados para o sistema de arquivos no MySQL?

2

Eu deletei vários GB de dados do MySQL, mas ele não foi retornado para o sistema de arquivos. Meus discos estão ficando cheios, então como faço isso? Todos os dados estão no arquivo ibdata1 desde que é InnoDB.

Eu tentei mysqloptimize -A -o mas isso não ajudou.

Editar:  Versão do servidor: 5.0.51a-24 + lenny2 + spu1 (Debian)

    
por Thomas 26.03.2010 / 21:09

3 respostas

4

desde que você parece ter arquivo innodb monolítico - você não pode encolher.

se você puder pagar o tempo de inatividade, faça o seguinte:

  1. pára o mysql.
  2. faça um backup baseado em arquivo de todos os arquivos / diretórios do diretório de dados mysql [incluindo os arquivos de log ibdata e innodb].
  3. inicie o mysql, execute mysqldump -uroot -ppass -A > file.sql
  4. pára o mysql novamente
  5. reconfigure o mysql para usar arquivo por tabela para innodb [add to my.cnf innodb_file_per_table]
  6. remova o diretório innodb ibdata / log files / com seu banco de dados
  7. inicie o mysql e recupere os dados do seu backup do ponto # 3 - cat arquivo.sql | mysql -uroot -ppass

no futuro, você será capaz apenas de fazer backup & solte uma única tabela e restaure-a depois - graças à opção de arquivo por tabela.

após remover os dados (passo 6) você precisa inicializar com "mysqld --skip-grant-tables", caso contrário o mysqld não inicializará porque não há tabelas de permissões.

    
por 26.03.2010 / 21:21
1

Se você tiver innodb_file_per_table ativado, siga as instruções abaixo. No entanto, se isso ainda não estiver em uso, seu esquema precisará ser recriado integralmente para que o espaço seja liberado.

Com o InnoDB, você precisa alter da tabela. Versões mais recentes do MySQL também executam a mesma função com optimize table .

Tenha cuidado com tabelas grandes, pois esses comandos bloqueiam a tabela.

    
por 26.03.2010 / 21:12
1

Quando você coloca dados em uma tabela que pode expandir, aumenta de tamanho. Quando você EXCLUIR dados da tabela, esse tamanho permanecerá o mesmo.

Existem algumas coisas que você pode fazer:

1) ALTER a mesa, como Warner sugeriu, para reduzir o tamanho.

2) OPTIMIZE a tabela (se isso for suportado). Isso também deve reduzir o tamanho.

3) Faça o backup da tabela, solte a tabela e reimporte os dados em uma nova tabela.

Em todos os casos, você deve fazer o backup dos dados primeiro. Você deve executar um cronjob para otimizar ou alterar periodicamente, se remover dados regularmente. Isso permanece verdadeiro se você estiver executando o MySQL, MSSQL ou Oracle. Todos eles requerem manutenção.

@Warner: Bem, principalmente preferência. Vou começar dizendo que eu não uso o MySQL para qualquer coisa onde o desempenho é um fator, e se eu fizesse isso, eu otimizaria, então alteraria a tabela para torná-la maior para que não houvesse uma penalidade de expansão.

Para minhas necessidades, é 100% sobre automação e facilidade de manutenção. A otimização otimizada mantém tudo limpo e organizado.

    
por 26.03.2010 / 21:23

Tags