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-tables
a 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.