sql >> Databáze >  >> RDS >> Mysql

Jak získat správný výpis pomocí mysqldump a single-transaction, když se současně používá DDL?

Otevřete mysql příkazovém okně a zadejte tento příkaz:

mysql> FLUSH TABLES WITH READ LOCK;

Tímto uzamknete vše tabulky ve všech databáze v této instanci MySQL, dokud nevydáte příkaz UNLOCK TABLES (nebo ukončit klientské připojení, které má tyto zámky čtení).

Chcete-li to potvrdit, můžete otevřít další příkazové okno a pokusit se provést ALTER , DROP , RENAME nebo TRUNCATE . Tyto příkazy se zablokují a čekají na uvolnění zámku čtení. Čekání ukončíte stisknutím Ctrl-C.

Ale zatímco tabulky mají zámek čtení, stále můžete provést mysqldump zálohování.

FLUSH TABLES WITH READ LOCK příkaz může být stejný jako při použití --lock-all-tables možnost mysqldump . Není to úplně jasné, ale tento dokument Zdá se, že to podporuje:

Oba FLUSH TABLES WITH READ LOCK a --lock-all-tables použijte frázi "globální zámek čtení", takže si myslím, že je pravděpodobné, že tyto dělají totéž. Proto byste měli být schopni použít tuto možnost k mysqldump a chránit proti souběžným ALTER, DROP, RENAME a TRUNCATE.

Re. váš komentář:Následující je od Guilhema Bichota v protokolu chyb MySQL, na který jste odkazovali:

Z toho vyplývá, že nemůžete získat souběžný přístup během zálohování a současně blokovat ALTER, DROP, RENAME a TRUNCATE.



  1. Funkce RPAD() v Oracle

  2. Fulltextové vyhledávání s InnoDB

  3. JDBC vždy testuje poslední řádek tabulky MySQL?

  4. Django-DB-Migrations:nelze ALTER TABLE, protože má čekající spouštěcí události