Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment obtenir un dump correct en utilisant mysqldump et single-transaction lorsque DDL est utilisé en même temps ?

Ouvrez un mysql fenêtre de commande et lancez cette commande :

mysql> FLUSH TABLES WITH READ LOCK;

Cela verrouillera tous tableaux dans tous bases de données sur cette instance MySQL jusqu'à ce que vous émettez UNLOCK TABLES (ou mettez fin à la connexion client qui détient ces verrous en lecture).

Pour le confirmer, vous pouvez ouvrir une autre fenêtre de commande et essayer de faire un ALTER , DROP , RENAME ou TRUNCATE . Ces commandes se bloquent, attendant que le verrou de lecture soit libéré. Appuyez sur Ctrl-C pour mettre fin à l'attente.

Mais alors que les tables ont un verrou en lecture, vous pouvez toujours effectuer un mysqldump sauvegarde.

Les FLUSH TABLES WITH READ LOCK la commande peut être identique à l'utilisation de --lock-all-tables option de mysqldump . Ce n'est pas tout à fait clair, mais ce document semble le supporter :

Les deux FLUSH TABLES WITH READ LOCK et --lock-all-tables utilisez l'expression "verrou de lecture global", donc je pense qu'il est probable que ceux-ci fassent la même chose. Par conséquent, vous devriez pouvoir utiliser cette option pour mysqldump et protéger contre ALTER, DROP, RENAME et TRUNCATE simultanés.

Concernant. votre commentaire :ce qui suit provient de Guilhem Bichot dans le journal des bogues MySQL auquel vous avez lié :

À partir de là, il semble que vous ne puissiez pas obtenir un accès simultané lors d'une sauvegarde et bloquer simultanément ALTER, DROP, RENAME et TRUNCATE.