MySQL innodb recovery de arquivos de dados

2

Ontem à noite, meu servidor MySQL travou e agora tenho vários bancos de dados, dados esses que não consigo recuperar.

De acordo com o errorlog, as coruptions nos tablespaces aconteceram há um tempo (poucos meses), mas ninguém notou isso e ontem, quando o MySQL travou (por motivo completamente diferente), ele falhou ao iniciar com o seguinte erro:

2015-06-09 23:09:23 14642 [Note] InnoDB: Starting crash recovery.
2015-06-09 23:09:23 14642 [Note] InnoDB: Reading tablespace information from the .ibd files...
2015-06-09 23:09:24 14642 [ERROR] InnoDB: Tried to read 16384 bytes at offset 0. Was only able to read 0.
2015-06-09 23:09:24 7f648369a7e0  InnoDB: Operating system error number 2 in a file operation.
InnoDB: The error means the system cannot find the path specified.
InnoDB: If you are installing InnoDB, remember that you must create
InnoDB: directories yourself, InnoDB does not create them.
2015-06-09 23:09:24 14642 [ERROR] InnoDB: File (unknown): 'read' returned OS error 71. Cannot continue operation

Quando o banco de dados foi iniciado com innodb-force-recovery definido como 6, o servidor foi iniciado, com muitas dessas mensagens no log de erros:

2015-06-09 23:16:50 16659 [ERROR] InnoDB: Failed to find tablespace for table '"db1234"."tbl456"' in the cache. Attempting to load the tablespace with space id 275772.

Consegui descartar a maioria dos bancos de dados e importá-los para limpar o diretório de dados. Mas alguns dbs corromperam o tablespace e não consigo lançá-los (ou até mesmo abrir qualquer tabela neles).

Então, agora eu tenho vários (cerca de cem) bancos de dados, que não podem ser carregados no servidor MySQL ao vivo. Eu tenho seus arquivos de dados (arquivos .frm e .ibd), mas eles estão de alguma forma corrompidos e o MySQL não consegue abri-los:

2015-06-10 18:37:18 3965 [Warning] InnoDB: Cannot open table db123/tbl456 from the internal data dictionary of InnoDB though the .frm file for the table exists. See http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html for how you can resolve the problem.

Eu tentei copiar arquivos de dados em outra instância do MySQL, mas sem sucesso, eu até tentei criar arquivos .frm novos (mas eu não sei a estrutura das tabelas), pare o servidor, substitua-os pelo certos, inicie o servidor e abra-os - novamente sem sucesso.

Infelizmente, eu não tenho backup desses bancos de dados, porque eles foram corrompidos há muito tempo e os backups não salvaram nenhum dado.

Então, agora eu tenho os dados em arquivos de dados innodb, mas não consigo carregá-los no servidor ao vivo. Existe alguma maneira de salvá-los?

Eu encontrei este kit de ferramentas: link , mas não tenho certeza se é possível para mim usá-lo, é bastante complicado e eu não vejo como recuperar uma centena de bancos de dados, cuja estrutura é desconhecida para mim ..

O servidor usa o MySQL 5.6.17, compilado a partir da fonte.

    
por dave 10.06.2015 / 19:21

1 resposta

2

Como autor do kit de ferramentas de recuperação de dados Percona, recomendo que você use o Kit de ferramentas de recuperação de dados do TwinDB . Não há desenvolvimento no conjunto de ferramentas da Percona nos últimos dois anos e todos os novos recursos vão para o kit de ferramentas do TwinDB. Seu caso é descrito em um post Recuperar banco de dados corrompido do MySQL

Para recuperar a estrutura da tabela, você pode usar a ferramenta mysqlfrm ou recuperar a estrutura de Dicionário do InnoDB

    
por 10.06.2015 / 19:44

Tags