クラッシュセーフなスレーブ

MySQLでslaveをクラッシュセーフ*1にするには、

  • MySQL 5.6以上
  • relay_log_recovery=ON
  • relay_log_info_repository=TABLE

というセッティングが必要。詳細は"こちら"、翻訳版は"こちら"


ざっくり言えば、リレーログのreplayと同じトランザクションで、InnoDBテーブルにリレーログの情報を書き込みcommitするので、大丈夫だよというお話。


MariaDBがこの機能に追従しないので、どうしたんだろうと思っていたら、MariaDBはGTIDのreplay状態などをgtid_slave_posというInnoDBテーブルに書き込むという技術的選択をしていた。もちろん、書き込むタイミングはreplayとおなじトランザクション
よって、MariaDB10.0以降は、GTIDを設定すればslaveがクラッシュセーフになる。MariaDBのGTIDはそこそこ完成しているので、こっちのほうが合理的な気がする*2

*1:スレーブがダウンしても、リレーログなどの情報が狂わないで再起動できる。

*2:MySQLのGTIDがまともになったら、同様の選択をするように思う。いつマトモになるかは知らないが。