Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como obter um dump correto usando mysqldump e transação única quando o DDL é usado ao mesmo tempo?


Abra um mysql janela de comando e emita este comando:
mysql> FLUSH TABLES WITH READ LOCK;

Isso bloqueará todos tabelas em todos bancos de dados nesta instância MySQL até que você emita UNLOCK TABLES (ou encerrar a conexão do cliente que mantém esses bloqueios de leitura).

Para confirmar isso, você pode abrir outra janela de comando e tentar fazer um ALTER , DROP , RENAME ou TRUNCATE . Esses comandos travam, aguardando a liberação do bloqueio de leitura. Pressione Ctrl-C para encerrar a espera.

Mas enquanto as tabelas têm um bloqueio de leitura, você ainda pode executar um mysqldump cópia de segurança.

O FLUSH TABLES WITH READ LOCK comando pode ser o mesmo que usar o --lock-all-tables opção de mysqldump . Não está totalmente claro, mas este documento parece apoiá-lo:

Ambos FLUSH TABLES WITH READ LOCK e --lock-all-tables use a frase "bloqueio de leitura global", então acho que é provável que eles façam a mesma coisa. Portanto, você deve poder usar essa opção para mysqldump e proteger contra ALTER, DROP, RENAME e TRUNCATE simultâneos.

Ré. seu comentário:O seguinte é de Guilhem Bichot no log de erros do MySQL que você vinculou:

A partir disso, parece que você não pode obter acesso simultâneo durante um backup e bloquear simultaneamente ALTER, DROP, RENAME e TRUNCATE.