Como desfazer a tabela DROP?

Como desfazer a tabela DROP?

Eu acidentalmente deixei cair todas as mesas. Posso restaurar de volta? Não tenho a cópia de segurança.

Responder1

Se você literalmente não tem backup, tenho 99% de certeza de que está sem sorte.

Se você tiver alguma forma de backup, por mais antiga que seja, você tem o log binário ativado por meio da opção log-bin no arquivo de configuração do MySQL (my.ini)? Nesse caso, você poderá recuperar desde o último backup.

Má maneira de começar uma semana cara, desculpe.

Responder2

A pergunta é bastante antiga, mas não existe uma única resposta positiva, então acrescentarei uma.

Depois que o MySQL descarta uma tabela, os dados ainda ficam na mídia por um tempo. Assim você pode buscar registros e reconstruir uma tabela. Mais tarde farei um blog sobre isso, mas por enquanto um esboço rápido.

Você precisaria ter a estrutura da sua tabela (instrução CREATE TABLE).

Se innodb_file_per_table estiver ON, a tabela eliminada estará na partição do disco. Pare o MySQL e monte-o novamente como somente leitura o mais rápido possível. Se o MySQL estava em uma partição raiz (o que não é uma boa ideia), tire uma imagem ou retire o disco e conecte-o a outro servidor. Pare todas as gravações em outras palavras.

Se innodb_file_per_table estiver desativado, basta parar o MySQL.

Em seguida, baixe e compile a ferramenta un-drop para InnoDB emhttps://github.com/twindb/undrop-for-innodb/. Verifique a postagem "[Compilando o kit de ferramentas de recuperação TwinDB] [1]" para obter detalhes.

Em seguida, analise a partição do disco ou ibdata1 (dependendo da configuração innodb_file_per_table) com stream_parser :

./stream_parser -f /path/to/diskimage_or_ibdata1

Em seguida, recupere o dicionário InnoDB para saber em qual index_id estava a tabela eliminada.

Então pegue a estrutura da tabela e busque os registros

./c_parser -f pages-diskimage_or_ibdata1/FIL_PAGE_INDEX/00000<index_id>.page

Ele produzirá registros para stdout e o comando LOAD DATA para stderr. [1]:https://twindb.com/how-to-recover-innodb-dictionary/

Tutorial em vídeo PS sobre Undrop For InnoDB - Visão geral do Undrop for InnoDBhttps://youtu.be/-1LeLhGjAWM

Responder3

Aqui está o que eu fiz. No diretório mysql (para Ubuntu é /var/lib/mysql, para Mac usando Homebrew é /usr/local/var/mysql), encontrei alguns arquivos. Primeiro copiei o diretório myapp_development/ contendo o esquema específico em meu diretório local mysql. Então fiz backup do meu ibdata1 local e copiei o ibdata1 do servidor para o diretório mysql. Matou o mysqld. ( ps auxpara encontrar o PID, então kill PID). Reiniciei o mysql, ele iniciou no modo de recuperação de falha. Em seguida, acionei meu cliente mysql local e gerei um despejo completo das tabelas que eu precisava.

E 15.000 linhas representando semanas de trabalho inserindo metadados que pensávamos terem desaparecido para sempre, estão salvas!!

Espero que isso ajude alguém.

Responder4

Você não pode "desfazer" um arquivo DROP TABLE.

Você pode olhar e ver se aquele MySQL tinharegistro binárioativado, talvez você possa extrair alguns dados de lá.

Fora isso, você pode esquecer o MySQL e estar na mesma classe de problemas de "Excluí acidentalmente alguns arquivos do meu sistema de arquivos". Existem algumas ferramentas que tentam recuperar arquivos, e também existem empresas que fazem isso de forma profissional.

informação relacionada