mysqldump は、データベースの中身を SQL 文としてダンプし、SQL 文としてリストアするため、大量データのバックアップ・リストアにかなりの時間を要することがあります。データによっては、ダンプは15分で終わるけど、リストアに数日かかるケースなんてのもあります。
SQL 文をダンプする代わりに、/var/lib/mysql などのデータディレクトリをファイルごと高速にバックアップするツールを、Perconna社が XtraBackup という名前で公開しています。
XtraBackup は MySQL 向けのツールですが、MariaDB では MySQL との互換性が一部失われてきていますので、MariaDB では、XtraBackup をベースとした mariabackup を開発し、MariaDB に同梱しています。
バックアップするには、--backup オプションを使用します。
# mariabackup --backup -u root -pパスワード --target-dir /tmp/backup
バックアップ中は FLUSH TABLES WITH READ LOCK で全テーブルがロックされます。--no-lock でロックしないようにできますが、自分で静止点を考慮する必要があります。
--prepare オプションで、バックアップデータの一貫性が保たれているかチェックすることができます。
# mariabackup --prepare --target-dir /tmp/backup : 191208 03:16:33 completed OK!
--copy-back オプションでリストアします。
# systemctl stop mariadb # rm -rf /var/lib/mysql/* # mariabackup --copy-back --target-dir /tmp/backup # chown -R mysql:mysql /var/lib/mysql/* # systemctl start mariadb
バイナリログが退避されていれば、障害発生直前の状態までロールフォワードすることが可能です。xtrabackup_binlog_info にバイナリログのファイル名とポジション番号が記録されています。手順は mysqldump を参照してください。
# cat /tmp/backup/xtrabackup_binlog_info mariadb-bin.000005 389