Como exatamente o mecanismo InnoDB no MySQL atualiza seus principais arquivos de armazenamento de dados?

0

Chegou ao meu conhecimento durante o teste do utilitário de backup Back in Time do Linux que não consigo entender como o MariaDB realmente salva os dados.

Depois de adicionar um registro falso a uma tabela e deixá-lo até o próximo instantâneo, fiquei surpreso ao descobrir que restaurar o instantâneo mais antigo (tirado antes do registro falso adicionado) não resultou na remoção do registro falso.

Eu tentei isso mais duas vezes: novo registro falso adicionado, instantâneo ocorre (automaticamente, porque isso é o que eu disse Back In Time para fazer) ... e restaurar não faz o que eu esperava.

Observando os arquivos "Modificados por" reais, no diretório principal (onde todos os bancos de dados são subdiretórios), descubro que apenas dois arquivos parecem ter sido alterados: ib_logfile0 e ib_logfile1 . Ao configurar o meu trabalho de Back In Time eu deliberadamente perdi estes fora da configuração porque eu assumi que eles eram "apenas logs". Claramente NÃO.

Para resolver o meu problema imediato, parece que tudo o que tenho a fazer é incluir esses dois arquivos em meus instantâneos. Mas como ou por qual processo o ibdata1 é atualizado com as novas informações? É talvez quando o serviço MySQL é desligado? Ou começou?

O que é estranho é que eu não pareço encontrar muita informação sobre isso.

    
por mike rodent 05.07.2018 / 23:45

1 resposta

0

Você não pode usar um utilitário de backup genérico, como o Back in Time, para fazer backup de bancos de dados.

Como você descobriu, você precisa de um instantâneo consistente dos arquivos do banco de dados para ter um backup viável. Sem isso, você vai acabar com algo que não está correto ou simplesmente não inicia. O problema é que ib_logfile* são temporariamente armazenadas do que migradas para os espaços de tabela. Você só pode deletá-los se você desligar (o que é mais que um systemctl pára o mysqld) o que obviamente não aconteceu quando você fez o backup.

Então, para o MySQL, use um programa de backup que reconheça o MySQL (mysqldump, mydumper, xtrabackup) ou uma ferramenta de snapshot consistente (instantâneos llvm ou uma funcionalidade de snapshot consistente baseada em sistema de arquivos) ou um slave de replicação métodos anteriores.

O confronto com arquivos de dados MySQL de fora do MySQL só resultará em dataloss. Não faça isso.

    
por 19.08.2018 / 05:46

Tags