MySQLでレプリケーションを構築して、こちらのコマンドを打ってステータスを確認します。
# SHOW SLAVE STATUS
するとレプリケーションが外れてしまっている場合、エラーを確認したところ
「HA_ERR_KEY_NOT_FOUND」という文字のエラーが発生してました。
このエラーはUPDATEやDELETEの時に対象のキーがなくて更新できなかった時に発生してしまうようです。
調べてみると、multi-table DELETEの場合にこんなことが発生してしまうようなので、設定を変更して対応しちゃいます。
やり方はslave_exec_mode を ‘IDEMPOTENT’に変更します。
下記のコマンドを流すとおそらく‘STRICT’と表示されると思いますので、これを変更します。
show variables like 'slave_exec_mode';
こちらのコマンドで変更できます。
set global slave_exec_mode = 'IDEMPOTENT';
‘IDEMPOTENT’に設定すると、主サーバーではすでに削除されたデータに対して DELETE 操作が発行された場合や主サーバーではすでに存在するデータに対して INSERT 操作が発行された場合などのエラーを無視するようになるので、今回のエラーも無視されるようになり、レプリケーションが外れなくなるというものです。
設定を変更したら、こちらのコマンドでレプリケーションを再開します。
start slave;
このままだと一時的な設定変更なので、再起動するとまた設定が戻ってしまうので、MySQLの設定ファイルに追記しておきます /etc/my.cnf(環境によって場所は違うかも)
slave_exec_mode=IDEMPOTENT
これで同じ原因でレプリケーションが止まってしまうことはなくなると思います。
コメント