Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie erhalte ich einen korrekten Dump mit mysqldump und Single-Transaction, wenn DDL gleichzeitig verwendet wird?

Öffnen Sie ein mysql Befehlsfenster und geben Sie diesen Befehl ein:

mysql> FLUSH TABLES WITH READ LOCK;

Dadurch werden alle gesperrt Tabellen in alle Datenbanken auf dieser MySQL-Instanz, bis Sie UNLOCK TABLES ausgeben (oder beenden Sie die Client-Verbindung, die diese Lesesperren hält).

Um dies zu bestätigen, können Sie ein weiteres Befehlsfenster öffnen und versuchen, ein ALTER auszuführen , DROP , RENAME oder TRUNCATE . Diese Befehle hängen und warten darauf, dass die Lesesperre aufgehoben wird. Drücken Sie Strg-C, um das Warten zu beenden.

Aber während die Tabellen eine Lesesperre haben, können Sie immer noch einen mysqldump durchführen Sicherung.

Die FLUSH TABLES WITH READ LOCK Befehl darf dasselbe sein wie die Verwendung von --lock-all-tables Option von mysqldump . Es ist nicht ganz klar, aber dieses Dokument scheint es zu unterstützen:

Beide FLUSH TABLES WITH READ LOCK und --lock-all-tables Verwenden Sie den Ausdruck "globale Lesesperre", daher denke ich, dass diese wahrscheinlich dasselbe tun. Daher sollten Sie diese Option für mysqldump verwenden können und Schutz vor gleichzeitigem ALTER, DROP, RENAME und TRUNCATE.

Betreff. Ihr Kommentar:Das Folgende stammt von Guilhem Bichot aus dem MySQL-Fehlerprotokoll, auf das Sie verlinkt haben:

Daraus ergibt sich, dass Sie während eines Backups keinen gleichzeitigen Zugriff erhalten und gleichzeitig ALTER, DROP, RENAME und TRUNCATE blockieren können.