Eu preciso reconstruir a replicação mestre-escravo de toda a instância do mariadb no innodb. O que vejo com frequência é que as pessoas lêem o bloqueio, depois despejam o mestre e desbloqueiam, como:
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
mysqldump --all-databases > all.sql
UNLOCK TABLES;
Nesse cenário, o mestre fica bloqueado por um período significativo de tempo. Meu mestre é produção, então prefiro realizar esta operação sem tempo de inatividade. Meu plano é fazer isso em vez disso:
mysqldump --single-transaction --master-data --all-databases > all.sql
Estou certo em supor que neste caso não preciso manter o bloqueio do banco de dados e o dump é consistente e bom para ser usado para reconstruir a máquina escrava? Eu entendo que no início da minha declaração haverá um bloqueio curto. Só não vejo necessidade de realizar bloqueio adicional no meu caso. Isso é correto?
Além disso, --single-transaction garante consistência de banco de dados único ou instância inteira? É apenas uma transação, não importa quantos bancos de dados existam na instância ou nova transação para cada banco de dados?
--single-transaction está garantindo a consistência de toda a instância, então sim, em vários bancos de dados.
Ele assume que a maioria das tabelas são transacionais (ou seja, innodb). Para tabelas myisam, estas ainda são lidas bloqueadas brevemente pelo tempo necessário para despejá-las.
O método de instantâneo mysqldump está no manual .