
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 aux
para 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.