sql >> Database >  >> RDS >> Mysql

Hoe krijg ik een correcte dump met mysqldump en single-transactie wanneer DDL tegelijkertijd wordt gebruikt?

Open een mysql opdrachtvenster en geef deze opdracht:

mysql> FLUSH TABLES WITH READ LOCK;

Dit vergrendelt alle tabellen in alle databases op deze MySQL-instantie totdat u UNLOCK TABLES issue uitgeeft (of beëindig de clientverbinding die deze leesvergrendelingen bevat).

Om dit te bevestigen, kunt u een ander opdrachtvenster openen en proberen een ALTER . uit te voeren , DROP , RENAME of TRUNCATE . Deze commando's blijven hangen, wachtend tot de leesvergrendeling wordt opgeheven. Druk op Ctrl-C om het wachten te beëindigen.

Maar hoewel de tabellen een leesvergrendeling hebben, kunt u nog steeds een mysqldump . uitvoeren back-up.

De FLUSH TABLES WITH READ LOCK commando mag hetzelfde zijn als het gebruik van de --lock-all-tables optie van mysqldump . Het is niet helemaal duidelijk, maar dit document lijkt het te ondersteunen:

Beide FLUSH TABLES WITH READ LOCK en --lock-all-tables gebruik de uitdrukking "global read lock", dus ik denk dat het waarschijnlijk is dat deze hetzelfde doen. Daarom zou je die optie moeten kunnen gebruiken om mysqldump en beschermen tegen gelijktijdige ALTER, DROP, RENAME en TRUNCATE.

Met betrekking tot. jouw commentaar:het volgende is van Guilhem Bichot in het MySQL-buglogboek waarnaar je hebt gelinkt:

Hieruit blijkt dat u tijdens een back-up geen gelijktijdige toegang kunt krijgen en tegelijkertijd ALTER, DROP, RENAME en TRUNCATE kunt blokkeren.



  1. JSON_STORAGE_FREE() – Ontdek hoeveel opslagruimte vrijkwam na een update van een JSON-document in MySQL

  2. Lijst met datum- en tijdfuncties in SQL Server (T-SQL)

  3. De totale gegevensgrootte van de BLOB-kolom in een tabel berekenen

  4. CSV versus MySQL-prestaties