- 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。