sql >> Databasteknik >  >> RDS >> Mysql

Hur får man en korrekt dump med mysqldump och single-transaction när DDL används samtidigt?

Öppna en mysql kommandofönstret och utfärda detta kommando:

mysql> FLUSH TABLES WITH READ LOCK;

Detta låser alla tabeller i alla databaser på den här MySQL-instansen tills du utfärdar UNLOCK TABLES (eller avsluta klientanslutningen som har dessa läslås).

För att bekräfta detta kan du öppna ett annat kommandofönster och försöka göra en ALTER , DROP , RENAME eller TRUNCATE . Dessa kommandon hänger och väntar på att läslåset ska släppas. Tryck på Ctrl-C för att avsluta väntan.

Men även om tabellerna har ett läslås kan du fortfarande utföra en mysqldump säkerhetskopiering.

FLUSH TABLES WITH READ LOCK kommandot kan vara samma som att använda --lock-all-tables alternativet mysqldump . Det är inte helt klart, men det här dokumentet verkar stödja det:

Båda FLUSH TABLES WITH READ LOCK och --lock-all-tables använd frasen "globalt läslås", så jag tror att det är troligt att dessa gör samma sak. Därför bör du kunna använda det alternativet för att mysqldump och skydda mot samtidiga ALTER, DROP, RENAME och TRUNCATE.

Re. din kommentar:Följande är från Guilhem Bichot i MySQL buggloggen som du länkade till:

Av detta låter det som att du inte kan få åtkomst samtidigt under en säkerhetskopiering och samtidigt blockera ALTER, DROP, RENAME och TRUNCATE.



  1. Hur kan jag ändra min standarddatabas i SQL Server utan att använda MS SQL Server Management Studio?

  2. Hur man sammanfogar två tabeller med hjälp av en kommaseparerad lista i sammanfogningsfältet

  3. Anledning till varför Oracle är skiftlägeskänsligt?

  4. hur sammanfogar man strängar?