MySQL設定メモ2

MySQL設定メモ に続いて、今回はレプリケーションの設定項目について書きます。

log-bin

まず設定する項目であるバイナリログ有効化。
物理ディスクを分ける事ができる場合は、別のディスクに出力されるようパスを設定しておくのが良いです。

server_id

サーバーを区別するIDの設定。
これも最初に設定する項目ですね。
どのような値を設定するかいつも悩んでしまいます。
ロール毎に1000の位を連番で割り当てる等、構成管理のルールに合わせて決めましょう。

binlog_format

バイナリログのフォーマット設定。
デフォルトはMIXEDになっていますが、私はROWにします。
ROWの場合、バイナリログのサイズは増えますが、不整合が起きにくくなるのと、
更新された列のデータが完全な状態で残るので、何か問題が起きた際に、バイナリログを調査しやすくなる、という事があります。

expire_logs_days

自動削除する期限の設定(日数)。
大体7日〜14日を設定しています。
ディスクフルにならない程度に、少し長めにしておいた方が若干安心です。

slave_compressed_protocol

バイナリログの出力量が非常に多い場合、この設定を有効化すると、
master – slave間の通信が圧縮され、バイナリログ転送の高速化が期待できます。
master/slave両方で設定する必要があります。

slave_parallel_workers

slave側のバイナリログ適用を並列化する設定。
いわゆるSQLスレッドを複数に稼働させます。
一つ制限があり、1つのSQLスレッドは1つのDBしか処理できません。
DBが2つしか存在しないのに、slave_parallel_workers=4 と設定しても、2スレッドしか稼働しないということです。
この設定は一度導入したことがあるのですが、動作が不安定で定期的にInnoDBがクラッシュするようになったため、長期運用した経験はありません。

master_info_repository, relay_log_info_repository

master.infoやrelaylog.infoの管理をどこでするか、という設定。
master_info_repository=TABLE とすると、InnoDBで管理されるようになります。
ファイルベースでは無く、InnoDB化することで何がうれしいかというと、クラッシュセーフになるということ。
また副次的な作用として、master.infoの書き込みが高速化されます。
レプリケーションの遅延が気になる方は、一度変更してみても良いかもしれません。

このあたりでしょうか。後はshow slave statusを適宜監視するようにしておく等、
レプリケーションがクラッシュしたことを検知できるようにしておくことも必要ですね。