Gostaria de saber se durante uma mysqldump
execução da seguinte maneira
mysqldump --all-databases --master-data > dump.sql
todas as tabelas ficam bloqueadas durante todo o processo, ou apenas tabela por tabela? Em outras palavras, interrompe mysqldump
(suspende) todas as consultas de escrita durante o processo, ou apenas aquelas que estão tentando modificar a tabela que está sendo exportada atualmente? Essas consultas são interrompidas ou suspensas?
Tenho um grande banco de dados que atende continuamente um aplicativo usado pelos clientes. Tem cerca de 50 GB e levará horas até que o despejo seja concluído. Não consigo parar o banco de dados e preciso despejá-lo sem afetar muito sua capacidade de funcionamento. Pretendo usar esse dump para replicar o banco de dados em outro servidor sob estratégia mestre-escravo. Para sua informação, o log binário está ativado e server_id
definido.
+-------------------------------+
| version() |
+-------------------------------+
| 5.6.14-1+debphp.org~precise+1 |
+-------------------------------+
Sim, o mysqldump deve bloquear todas as tabelas (ele usa
FLUSH TABLES WITH READ LOCK
) se o seu banco de dados usar tabelas não transacionais. Isso é para garantir um estado consistente dos dados no backup.Uma prática recomendada é usar tabelas InnoDB, que suportam transações, e executar o dump com:
Usar uma transação permite que o mysqldump seja executado pelo tempo que for necessário, sem bloquear as tabelas. Ele pode garantir um estado consistente dos dados despejados em virtude do isolamento da transação de leitura repetível.
Enquanto isso, outros clientes podem continuar a ler e gravar quaisquer tabelas no banco de dados.
InnoDB é o mecanismo de armazenamento padrão no MySQL 5.6.14 (que, FWIW, foi lançado em 20/09/2013, portanto já tem mais de dez anos e não é mais compatível).