Skip to content

Instantly share code, notes, and snippets.

@WellingtonFonseca
Last active April 13, 2024 18:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save WellingtonFonseca/1882a78bf0e32ab9be7209c07a198a97 to your computer and use it in GitHub Desktop.
Save WellingtonFonseca/1882a78bf0e32ab9be7209c07a198a97 to your computer and use it in GitHub Desktop.
# recuperar dados via .ibd (mysql 8.0.36)

recuperar dados via .ibd (mysql 8.0.36)

antes de iniciar, procure realizar o passo a passo no mesmo versionamento do mysql

  1. no novo banco de dados, crie o mesmo database com as mesmas tabelas (IMPORTANTE! Se conseguir criar com o mesmo layout de colunas será ótimo, porque o .ibd vai recuperar a mesma ordem dos dados. Mais abaixo e explico melhor)
  2. acesse a pasta data
  3. execute ls -la e obtenha o owner do diretório, creio que em servers seja mysql:mysql, aqui no meu caso aparece -rw-r----- 1 systemd-coredump systemd-coredump 486539264 abr 13 14:32 tbl_varejo_harmonizacao_vendas.ibd, logo systemd-coredump systemd-coredump (ou traduzindo systemd-coredump:systemd-coredump) é o owner dos meu diretórios
  4. agora que identificamos, vamos aos .ibds, então no diretório data você vai encontrar o diretório com o mesmo nome do database que criamos anteriormente.
  5. execute sudo rm -rf <nome_do_database>
  6. copie o mesmo diretório do diretório que queremos recuperar sudo cp -r diretorio_recuperar/data/<nome_do_database> .
  7. agora aplique o owner que identificamos no passo 3, sudo chown systemd-coredump:systemd-coredump <nome_do_database>
  8. acesse o diretório cd <nome_do_database>
  9. aplique também o owner agora a todos os arquivos aqui dentro sudo chown systemd-coredump:systemd-coredump *.*
  10. feito! reinicie o servidor
  11. depois de reiniciado acesse o seu front end (estou usando o dbeaver) e execute use mysql;
  12. agora você irá importar o tablespace para todas as tabelas do seu database alter table <nome_da_tabela> import tablespace;

observações:

  • eu tive alguns imports que alegaram
InnoDB: Tablespace is missing for table <nome_do_database>/<nome_da_tabela>.
InnoDB: IO Read error: (2, No such file or directory) Error opening './<nome_do_database>/<nome_da_tabela>.cfg', will attempt to import without schema verification

mas que no final, os dados foram importados com sucesso. Podendo, claro, estarem fora de layout que para corrigí-los explico logo abaixo.

  • e tive outros casos que
[1808] Schema mismatch (Clustered index validation failed. Because the .cfg file is missing, table definition of the IBD file could be different. Or the data file itself is already corrupted.)

mas que no final ele importou, porém com os dados totalmentes deslocados.

O que identifiquei nestes, é que por exemplo meu layout da tabela está (nome, idade, nascimento) porém no .ibd está (nome, nascimento, idade). O que fiz foi, corrigir o layout da tabela para que ficasse idem ao do .ibd e repetir o processo de recuperação anteriormente explicado, somente para estas tabelas em específico.

Logo em seguida ao executar o comando de import tablespace alegou a divergência acima da falta do .cfg mas os dados foram apresentados de forma correta.

Ao final o que eu me aconselho!

  • vou criar os dumps ou arquivos de inserts
  • recriar todo o banco de dados
  • e importar todos os dados da forma convencional

porque desta forma o servidor está totalmente limpo de manipulação e os dados serão importados de forma correta através do dump ou dos arquivos inserts

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment