sábado, 18 de maio de 2013

Um arquivo ibdata Menor

Original post: http://anothermysqldba.blogspot.com/2013/05/a-smaller-ibdata-file.html

Eu vi o desejo de um arquivo ibdata menor surgir recentemente no forums.mysql.com 

O banco de dados InnoDB usa o arquivo ibdata (s) para armazenar os dados do banco de dados no disco. Configurando seu sistema corretamente é fundamental e você pode aprender mais sobre essas opções aqui: http://dev.mysql.com/doc/refman/5.6/en/innodb-configuration.html 

InnoDB fornece uma transação ACID e mecanismo de armazenamento seguro, é muito produtivo, mas se você estiver apagando e / ou substituição de dados, muitas vezes, você vai precisar para recuperar o espaço perdido ao longo do tempo. Quanto tempo é dependente de seu sistema e uso. Você não pode executar um único comando e recuperar espaço em um arquivo ibdata. Ele vai dar alguns passos e não é um trabalho atrás do cenas, a não ser feito em um servidor escravo. Se você tem um escravo que é melhor para fazer esse trabalho no banco de dados escravo primeiro e depois pretende rodar o servidor de banco de dados para se tornar o banco de dados mestre. 

Assim, duas situações diferentes, estas não são as únicas soluções, mas algumas soluções: 


  • Você quer manter o ibdata apresentar o mesmo tamanho, mas você quer apenas limpar o espaço perdido
A melhor maneira de recuperar o espaço perdido é para despejar os dados e recarregá-lo.Sim, não é a primeira escolha para um DBA eu sei. Isso é mais problemático quanto maior seu banco de dados é. Eu espero que você tenha um banco de dados escravo e pode fazer isso fora do escravo, em seguida, torná-lo um mestre mais tarde. 


  1. Faça backup do banco de dados
    1. mysqldump --user=<username> --password=<> --add-drop-database --master-data=2 --triggers --routines --events --databases (list database names and do not add mysql to this list) > /Just_AN_example/mysqldump_<DATEHERE>_.sql
      1. Isso lhe dá uma cópia ASCII apenas em caso de corrupção binário.
      2. Ela também tem os dados mestre via um comentário, se necessário.
      3. Isto irá manter sua autenticação mysql no tato também.
        1. Gostaria de salvar o banco de dados mysql como depósito separadamente.
    2. Você também pode criar um backup com o MySQL Enterprise Backup ou Percona XtraBackup , se o sistema era um db maior e precisava de backups on-line estas são boas escolhas. Até você, que você usa para várias razões.
  2. Soma de verificação do banco de dados.
    1. Reúna alguns números sobre o que você tem para que você possa compará-lo quando você carregá-lo de volta.
      1. Isto pode ser feito com Percona Toolkit

        1. # ./pt-table-checksum --password=<Password> > checksum_before_dump.txt
      2. A consulta pode escrever-se.
        1. Eu tenho um blog sobre isso também
          1. http://anothermysqldba.blogspot.com/2013/05/mysql-checksum.html
  3. Stop / Start banco de dados e aproveitar este tempo de inatividade para quaisquer variáveis ​​somente leitura você gostaria de ajustar
  4. Carregue o banco de dados back


  1. Siga os passos 1 a 2, no processo acima.
  2. Na etapa 4 do processo acima, você vai querer adicionar o seguinte ao seu arquivo my.cnf.
    1. innodb_file_format = Barracuda
    2. innodb_file_per_table = 1
  3. Remova o arquivo ibdata e logs.
    1. Sem voltar a partir deste ponto
  4. Iniciar a base de dados
  5. Confirmá-lo está instalado e funcionando
  6. Carregue o banco de dados de backup.

Isto, obviamente, seria o melhor a fazer em um servidor não produção / slave para que você possa confirmar todos os passos e obter-se a uma situação viável, em seguida, gire o escravo para ser o novo mestre.