Znalazłem wiele witryn mówiących o tym, ale brakuje mi kilku ważnych szczegółów. Ogólne kroki są
- Biegać
FLUSH TABLES WITH READ LOCK
- Zrób migawkę ZFS
- Biegać
UNLOCK TABLES
Różne źródła podają, że InnoDB, którego używam, tak naprawdę nie honoruje FLUSH
. Podręcznik użytkownika MySQL zauważa, że istnieje FLUSH TABLES...FOR EXPORT
wariant do użycia z InnoDB, ale wymaga on indywidualnego określenia każdej tabeli, zamiast tworzenia kopii zapasowej całej bazy danych. Wolałbym unikać określania każdej tabeli indywidualnie, ponieważ istnieje spora szansa, że lista tabel nie będzie zsynchronizowana z tabelami, które faktycznie istnieją.
Innym problemem, jaki mam, jest to, że planuję zrobić coś takiego mysql -h"$HOST" -u"$USERNAME" -p"$PASSWORD" --execute="FLUSH TABLES WITH READ LOCK"
. Spowoduje to jednak opuszczenie blokady natychmiast po zakończeniu sesji. Ma to sens, ale jest również dość irytujące, ponieważ muszę trzymać blokadę odczytu, gdy wykonuję migawkę.
Moim drugim pomysłem jest zrobienie kopii zapasowej na gorąco za pomocą narzędzia takiego jak Percona XtraBackup i zrobienie migawek kopii zapasowej, ale wolałbym nie ponosić kosztów zapisania wszystkich moich danych w drugiej lokalizacji, aby je wykonać.