Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak uzyskać poprawny zrzut za pomocą mysqldump i pojedynczej transakcji, gdy jednocześnie używany jest DDL?

Otwórz mysql w oknie poleceń i wydaj następujące polecenie:

mysql> FLUSH TABLES WITH READ LOCK;

To zablokuje wszystkie tabele w wszystkich baz danych w tej instancji MySQL, dopóki nie wydasz polecenia UNLOCK TABLES (lub zakończ połączenie klienta, które utrzymuje te blokady odczytu).

Aby to potwierdzić, możesz otworzyć inne okno poleceń i spróbować wykonać ALTER , DROP , RENAME lub TRUNCATE . Te polecenia zawieszają się, czekając na zwolnienie blokady odczytu. Naciśnij Ctrl-C, aby zakończyć oczekiwanie.

Ale chociaż tabele mają blokadę odczytu, nadal możesz wykonać mysqldump kopia zapasowa.

FLUSH TABLES WITH READ LOCK polecenie może być taki sam jak przy użyciu --lock-all-tables opcja mysqldump . Nie jest to do końca jasne, ale ten dokument wydaje się to wspierać:

Oba FLUSH TABLES WITH READ LOCK i --lock-all-tables użyj wyrażenia „globalna blokada odczytu”, więc myślę, że prawdopodobnie robią to samo. Dlatego powinieneś być w stanie użyć tej opcji do mysqldump i chroń przed równoczesnymi ZMIANAMI, UPUSZCZANIEM, ZMIANA NAZWY i OCIĘCIEM.

Odnośnie. Twój komentarz:Poniższe informacje pochodzą od Guilhema Bichota w dzienniku błędów MySQL, do którego się połączyłeś:

Wygląda na to, że nie możesz uzyskać równoczesnego dostępu podczas tworzenia kopii zapasowej i jednocześnie zablokować ALTER, DROP, RENAME i TRUNCATE.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jaki jest najlepszy sposób przechowywania obrazów użytkowników przy użyciu PHP i MySQL?

  2. Wybierz zapytanie za pomocą warunku

  3. SQLSTATE[HY093]:Nieprawidłowy numer parametru:liczba powiązanych zmiennych nie odpowiada liczbie tokenów w wierszu 102

  4. Jak ustawić strefę czasową MySQL?

  5. zapisz wyniki zapytania sql do pliku w mysql