Descobri tarde demais que o script de backup dos bancos de dados MySQL não estava funcionando corretamente. Ou seja, quando o disco no servidor já havia começado a falhar e eu entrei via SSH e obtive uma tela cheia de lixo binário corrompido. Restaurar a partir dos escassos backups que não eram apenas arquivos vazios de .sql.gz nos perdia cerca de um mês de dados. Eu realmente adoraria se pudesse evitar esse cenário.
Consegui fsck o disco e extraí o conteúdo do diretório /var/lib/mysql
, com arquivos de 100MB ibdata1
, ib_logfile*
e .frm
e .opt
para cada banco de dados em subdiretórios. Eu não tenho /etc/mysql/my.cnf
, tudo abaixo parece estar perdido. Não há arquivos .ibd, presumivelmente porque innodb_file_per_table foi desativado.
Eu tenho uma instalação do MySQL 5.5 (mesma versão que falhou) na minha máquina de desenvolvimento e tentei restaurar os arquivos, seguindo as sugestões aqui e aqui . Eu coloquei os arquivos ibdata1
e .frm e .opt em /var/lib/mysql
definir as permissões & owner nos arquivos o mesmo que os padrões (alguns mysql:mysql
, alguns mysql:root
) depois de recriar as tabelas do esquema usando o cliente mysql.
Eu então executei o mysqld com o comando:
/usr/sbin/mysqld –innodb_log_file_size=4128768 –innodb_force_recovery=6
Termina imediatamente, sem saída. Um dmesg | tail
mostra um monte de:
[ 781.937089] init: mysql main process (1819) terminated with status 1
[ 781.937127] init: mysql respawning too fast, stopped
Ambos /var/log/mysql.log
e /var/log/mysql.err
estão vazios.
Eu tentei várias variações sobre esse tema do processo de recuperação. Eu tentei copiar todo o diretório de dados mysql recuperado em /var/lib
, eu tentei sobrescrever apenas ibdata1
e o subdiretório de banco de dados com as pastas .frm e .opt. Eu tentei com e sem os arquivos de log e incrementando o valor de recuperação de 1-6.
Se eu restaurar o diretório mysql original, o mysqld iniciará bem. O Apparmor não está sendo executado na máquina (algumas pessoas tiveram problemas com isso).
Eu li no MySQL Performance Blog da Percona que é possível restaurar os dados apenas do arquivo ibdata1. Eu só tenho 2 tabelas por banco de dados, e eu tenho o esquema - mas lendo o README fornecido com sua ferramenta de recuperação, parece que eu pelo menos preciso ser capaz de iniciar o mysql para obter informações sobre o espaço de tabela.