【MySQL】エラーで停止したレプリケーションを再開する方法
投稿 2022年9月19日
最終更新 2022年9月19日
専門用語多め
レプリケーション状況確認
SHOW SLAVE STATUS \G
現在のレプリケーションの状態を確認します。
下記の2か所が「Yes」なら問題ないです。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
ただし、片方でも「No」になっていると、エラーが起きています。
下記のどれかにエラー内容が書いていると思います。
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
エラー対処法
記載のエラー内容が、問題ないと判断できるのであれば、
そのエラーが起きているSQLをスキップするようにします。
手順
以下の手順はスレーブ側で作業を行います。
スレーブ停止
STOP SLAVE;
スキップするために、スレーブを停止します。
スキップ
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
マスターからのイベントをスキップします。
スレーブ再開
START SLAVE;
スレーブを再開します。
注意点
トランザクション全体がスキップ
ここで言う1スキップというのは、SQL文1行をスキップしてるのではなく、
「1トランザクション」をスキップしているみたいです。
詳しくはMySQL公式ドキュメントに記載されています。
そのため、もしトランザクション内で正常な(影響のない)SQLがあっても、
それすらスキップしてしまうため、余計に整合性が取れなくなったりもします。
しっかり理解したうえでスキップしないといけないですね。
まぁそもそもでエラーにならないことが一番ですが・・・
参考リンク
- JervinReal Jervin Real(英語記事です)
まとめ
MySQLのレプリケーションでエラーが出た時の対処法でした。
エラーでないのが一番ですが、エラーになっても冷静に対処しましょう。
焦りすぎて余計ぐちゃぐちゃになってしまわないよう、お気を付けを・・。
以上、ここまで見ていただきありがとうございます。
皆さまの快適な開発ライフに、ほんの少しでもお役に立てれば幸いです。