MySQL - Evite bloqueios de tabela durante o backup

2

Estou executando backups noturnos no meu servidor usando o mysqldump. Infelizmente isso praticamente mata meu site por meia hora ou mais todas as noites, já que as tabelas estão ficando bloqueadas durante o backup.

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

Existe uma maneira melhor de fazer backups como esse?

    
por Nils 27.05.2012 / 21:28

1 resposta

4

Você tem duas opções:

Use a opção --skip-lock-tables 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 banco de dados tocarem várias tabelas de uma só vez e uma tabela já estiver em backup e outra não. Por exemplo: duas tabelas: clientes e os pedidos. Se for feito o backup dos clientes primeiro e depois o novo par cliente / pedido for inserido, você poderá acabar com o pedido sem o cliente no seu backup).

Esse problema é a principal razão pela qual o mysqldump bloqueia todas as tabelas por padrão. Se esse problema não se aplicar a você, pular o bloqueio de tabelas no mysql é a solução mais simples.

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

Se seus dados do MySQL não estiverem em um volume LVM, você pode criar um servidor MySQL escravo e fazer o backup, sem tocar no mestre, portanto, o bloqueio ocorre no escravo e o mestre está sempre livre.

    
por 27.05.2012 / 23:19