MySQL - Evite bloqueios de tabelas durante o backup

MySQL - Evite bloqueios de tabelas durante o backup

Estou executando backups noturnos em meu servidor usando mysqldump. Infelizmente, isso praticamente mata meu site por cerca de meia hora todas as noites, já que as tabelas ficam bloqueadas durante o backup.

De acordo com a lista de processos, parece que às vezes as consultas em tabelas não relacionadas estão sendo bloqueadas, por exemplo, "INSERT INTO A" fica no estado bloqueado por vários minutos, enquanto a única consulta em execução toca apenas a tabela B.

Existe uma maneira melhor de fazer backups como este?

Responder1

Você tem duas opções:

A. Use --skip-lock-tablesa opção mysqldump. Suas tabelas não serão bloqueadas, mas seu backup pode não ser consistente (depende do seu esquema: se as transações do seu banco de dados tocarem em várias tabelas ao mesmo tempo, e uma tabela já tiver backup e outra não. Por exemplo: duas tabelas: clientes e pedidos. Se o backup dos clientes for feito primeiro e, em seguida, um novo par cliente/pedido for inserido, você poderá acabar com um pedido sem cliente no backup).

Este problema é o principal motivo pelo qual o mysqldump bloqueia todas as tabelas por padrão. Se este problema não se aplica a você, pular o bloqueio de tabela no mysql é a solução mais simples.

B. Use algum outro método de backup. Por exemplo: limpe tabelas com bloqueio de leitura, crie instantâneos LVM, desbloqueie tabelas, monte seu instantâneo LVM e faça backup de seus dados. Isso fica rapidamente e muito mais complexo do que o simples mysqldump. Google "backups mysql com instantâneos LVM", existem muitos scripts e tutoriais disponíveis.

Se seus dados MySQL não estiverem em um volume LVM, você pode criar um servidor MySQL escravo e fazer backup dele, sem tocar no mestre, para que o bloqueio ocorra no escravo e o mestre esteja sempre livre.

informação relacionada