Recuperar um banco de dados MySQL apenas com o arquivo bin-log

6

Aqui está a CATASTROPHE:

Estamos trabalhando em nossa empresa com um aplicativo da web para gerenciamento de testes: TestLink . Uma equipe estava trabalhando nisso por mais de um mês até agora. Ontem, outra equipe queria começar a usar o testLink também, então me pediram para instalá-lo para eles.

A instalação foi feita no mesmo servidor onde o primeiro TestLink estava rodando, estou usando o WampServer.2.0 no qual eu rodei o testLink, então eu comecei a instalá-lo novamente, infelizmente no mesmo WampServer .. eu estava um pouco cansado, e eu não mencionei na instalação que eu estava dando ao segundo TestLink o mesmo nome do banco de dados que o primeiro .. a instalação é bem-sucedida ... Mas o WAIT! ! todos os dados no primeiro banco de dados foram perdidos !! sobrescrito por um banco de dados vazio e novo ..! Eu senti que alguém definitivamente vai me matar!

Então eu inicio googling, mas desde que nenhum backup de banco de dados foi feito desde a instalação do primeiro TestLink .. eu realmente senti que não tenho solução .. eu tentei executar softwares para backup de arquivos substituídos e acidentalmente removidos, isso não ajudou .. claro ...

eu encontrei em este blog uma história sobre logs binários do MySQL , mas parece que é necessário ter pelo menos um backup para restaurar os dados perdidos. Na configuração do meu arquivo my.ini , a linha log-bin=mysql-bin está descomentada e consigo encontrar arquivos em mysql \ data \ que se parecem com isto: mysql- bin.00000x

Eu executei o comando mysqlbinlog em um deles usando: mysqlbinlog --start-datetime="2011-04-01 00:00:00" mysql-bin.000006 , que fez minha tela parecer com uma matriz um, eu posso reconhecer linhas parecidas com comandos TestLink, o comando parece terminar com sucesso .. mas não .. as tabelas no banco de dados permanecem inalteradas, vazias ...

Estou faltando alguma coisa? Existe uma luz de esperança?

Por favor, ajude ..

    
por EEAA 02.04.2011 / 16:22

2 respostas

5

O bin-log registrará todas as consultas de sempre que foi iniciado, então você tem basicamente três opções:

  1. O bin-log foi ativado desde o início e registrou todas as consultas no banco de dados. Neste caso, você pode simplesmente restaurar o banco de dados inteiro a partir do log de caixa.
  2. Você tem um backup antigo feito algum tempo depois que o bin-log foi ativado. Nesse caso, você pode restaurar a partir do backup e iniciar a partir do local no log de bin que o backup foi feito (backup incremental).
  3. O bin-log não contém todas as consultas da origem do banco de dados e você não tem backup. Neste caso você (eventualmente) será capaz de restaurar todos os dados contidos no bin-log, mas todos os dados não presentes estarão perdidos para sempre. Você pode tentar restaurar manualmente qualquer dado perdido, mas dependendo da estrutura / tamanho de seus dados, isso pode ser simples ou impossível.

Dos sons, você não tem backups, o que deixa as opções 1 e 3. Verifique o primeiro arquivo bin-log e veja de onde vem a entrada mais antiga para ver qual caso se aplica a você. Se você está procurando por um uso específico do mysqlbinlog, veja a documentação oficial que explica as coisas bonitas bem.

Se você se recuperar disso, a próxima coisa que você deve / deve fazer é implementar um agendamento de backup regular do banco de dados, incluindo cópias externas.

    
por 02.04.2011 / 17:53
1

Eu finalmente me livrei do problema e diminuí os danos usando os arquivos bin-log como o uesp disse. Eu usei o mysqlbinlog binlog_file | mysql -u root -p para recuperar 75% dos dados contidos no banco de dados, além de sua estrutura. Os restantes 25% foram escritos manualmente, levou cerca de meio dia para trazer de volta o todo.

Sim, foi uma experiência ruim, mas enriquecedora, eu configuro o backup automático todos os dias às 03:00, compactando o .sql dump, anexando-o a um email e enviando para outras máquinas, no caso do principal queima:)

Obrigado a todos por sua ajuda, a documentação oficial do MySQL também foi realmente útil!

Tenha um ótimo dia!

    
por 12.04.2011 / 10:54