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.