xtrabackupが終わらない
xtrabackupでバックアップとっていたがいつまでたっても終わる気配ないという状況に。 バージョンはxtrabackup2.4.7。
xtrabackupにはIOを制御するための--throttle
オプションがあって、これにやられた。
マニュアルの情報。
--throttle=#
This option limits xtrabackup –backup to the specified number of read+write pairs of operations per second.
@The xtrabackup Option Reference
詳細はここThrottling Backups。
簡単にまとめると、バックアップの時にread + writeを1 MB単位での1秒あたりの入出力操作の数を制御するとのこと。
単位はIOでデフォルトは0で制御しない。
- xtrabackupのざっくり動作
Innodbの場合はデータファイル(ibd file)とトランザクションログ(Innodb log file)をコピーする。
で、--parallel
オプションがあって、ここに値を設定するとibd fileはパラレルでコピーされるが、Innodb log fileには効かなくてシリアルでコピーする。
- 最初にInnodb log fileのコピーをシリアル実行で開始する。
- Innodb log fileのコピーが最新の更新に追いついたら、ibd fileのコピーをパラレル実行で開始する。(Innodb log fileのコピーと並列に)
- InnoDBのテーブルをバックアップした後に、FLUSH TABLE WITH READ LOCKして InnoDB以外のテーブルをコピーする。
ここで先程のthrottle
オプションはInnodb log fileとibd fileのコピーをスレッドごとにIO制御するようになっていて、
終わらなかった原因としては1のInnodb log fileのコピーをずっとしていたようだった。
--throttle
オプションで制御してコピーする量よりも更新量のが多いと、Innodb log fileのコピーがいつまでたっても最新の更新まで追いつかずにこのようなことが起こるので注意が必要。
マニュアルにも書いてたね。
the backup might be so slow that it will never catch up with the transaction logs that InnoDB is writing, so the backup might never complete.
ちなみに商用版のEnterprise BackupはInnodb log fileとibd fileのコピーを同時に開始している模様。
そして、--throttle
オプションのようなIOを制御する--sleep
オプションがあり、これはibd fileのコピーには有効であって、Innodb log fileには効かなくて全力で書き込んでくれる感じ。Enterprise Backupのが理想的な動きをしてくれるようです。