Tritonn のホットバックアップ(とsync 3回伝説)

Tritonn のホットバックアップ環境を構築しようと思って調査。結論から言うと 漢(オトコ)のコンピュータ道: MySQLバックアップ頂上決戦!! LVMスナップショット vs InnoDB Hot Backup の「MyISAMをスナップショットでバックアップ」でよさそう。

確認したこととしては、

  • Tritonn全文検索データは FLUSH TABLES しても fsync されない
    • つまり sync (1) の呼び出しが必須
  • linux の場合 sync (1) は1回呼べば十分だと man に書いてある
    • POSIX 的には何回呼んでも書き込みが完了してる保証はない

ってあたり。実際に、FLUSH TABLES WITH READ LOCK して sync 3回呼んでから LVM snapshot とって、myisamchk と sennachk してみたけど、myisamchk が「usable but not properly closed」って言う以外は問題なかった。

気になったけど放置したのは、以下のこと。

  • FLUSH TABLES WITH READ LOCK が fsync 呼ぶとは限らない
    • MySQL 5.0 では close_thread_tables() が fsync() してたのが、5.1 ではしなくなった?
      • そもそも 5.0 のマニュアルにも fsync() 呼ぶとは書いてない
    • 逆に言うと zfs とかじゃない限り sync (1) は必ず呼ばないとダメ
  • innodb_flush_log_at_trx_commit=1 以外の環境では、FLUSH TABLES WITH READ LOCK した直後に LVM スナップショット取ると、直前約1秒以内のトランザクションが失われる? (特に対策してる形跡はないので)