MySQLのレプリケーションで「HA_ERR_KEY_NOT_FOUND」エラーが発生したときの対処法!

解決 MySQL

※この記事にはプロモーションが含まれています。

MySQLでレプリケーションを構築して、こちらのコマンドを打ってステータスを確認します。

# SHOW SLAVE STATUS

するとレプリケーションが外れてしまっている場合、エラーを確認したところ

「HA_ERR_KEY_NOT_FOUND」という文字のエラーが発生してました。

このエラーはUPDATEDELETEの時に対象のキーがなくて更新できなかった時に発生してしまうようです。

調べてみると、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

これで同じ原因でレプリケーションが止まってしまうことはなくなると思います。

コメント

タイトルとURLをコピーしました