mysqldump com opção de transação única em servidores de produção ao vivo

1

No momento, estou investigando uma solução de backup mysql para implementar em alguns servidores de produção.

Depois de ler um pouco, concluí que a melhor solução é implementar uma replicação do mysql usando a metodologia mestre / escravo.

Honestamente e considerando minhas reais necessidades, pode ser um pouco exagerado, uma vez que um simples despejo de banco de dados seria suficiente.

Então, tentarei implementar uma solução de backup por meio do rsync e do mysqldump.

Uma vez que o tamanho dos bancos de dados não é muito grande (o ibdata1 do maior tem 42MB, sendo a execução do comando mysqldump bastante rápida, produzindo um arquivo de dump com 6.7M) e os acessos ao banco de dados são bastante reduzidos, seria seguro o suficiente usar mysqldump durante o período de trabalho, com a opção -single-transaction ?

Com essa abordagem, seria possível configurar uma tarefa Cron para executar 2-3 despejos durante o dia? Se eu estiver correto, o uso da opção -single-transaction concede alguma integridade de dados.

Agradeço antecipadamente por toda a ajuda, Atenciosamente

    
por Rui Gonçalves 04.02.2011 / 19:12

4 respostas

1

Para tabelas InnoDB, a transação única assegurará que o despejo de cada tabela seja consistente, mas não necessariamente será consistente com as outras tabelas, já que ele bloqueia e despeja um de cada vez, em vez de travá-los todos para a duração do despejo. E você, é claro, terá atrasado as gravações aguardando a liberação do bloqueio se você tentar escrever em uma tabela enquanto está sendo despejado.

Uma aposta melhor é usar um LVM ou sistema de arquivos que permita tirar instantâneos e, em seguida, bloquear todo o banco de dados por um período suficientemente longo para fazer um instantâneo, o que você pode fazer em seu próprio ritmo.

    
por 04.02.2011 / 19:18
1

É difícil para mim dizer sem saber: o padrão de acesso de seu site com o banco de dados, o tráfego de banco de dados ou o tamanho que você espera que o banco de dados obtenha. Se você está bem com qualquer tipo de bloqueio que acontecerá, eu digo: vá em frente.

Eu estou em um ambiente onde qualquer bloqueio acima e além do uso típico não é aceitável e nossos DBs estão em torno de 750GB. O que fazemos é pegar um instantâneo do LVM e depois rodar um mysqldump fora do snapshot. Claro que temos algum desempenho degradado durante o snapshot, mas é melhor do que bloquear completamente as tabelas.

    
por 04.02.2011 / 19:19
0

O Mysqldump bloqueia o backup de um banco de dados, portanto, você deve considerar o uso de uma ferramenta de backup ao vivo, como xtrabackup . Você precisará usar o MySQL build do Percona e converter todas as suas tabelas para o InnoDB. O último plugin InnoDB da Oracle também suporta backups ao vivo, não lembra o nome da ferramenta de backup ao vivo.

    
por 04.02.2011 / 19:20
0

Eu acho que a replicação do mysql é uma boa opção. O mysql gera novos logs depois de confirmar a transação. Assim, você terá backups consistentes até onde estiver usando transações corretamente.

Um backup completo no início e, em seguida, você pode obter os logs binários gerados pelo sistema de replicação. O arquivo de log binário já aplicado deve atualizar o banco de dados de maneira consistente.

Isso sempre pode ser usado. No entanto, a opção de usar instantâneos do sistema pode não ser viável, pois está relacionada ao sistema de arquivos que você está usando.

    
por 04.02.2011 / 21:20