【MySQL】エラーで停止したレプリケーションを再開する方法

投稿 2022年9月19日

更新 2022年9月19日

専門用語の数:

【MySQL】エラーで停止したレプリケーションを再開する方法

~ 目次 ~

レプリケーション状況確認

エラー対処法

注意点

参考リンク

まとめ

レプリケーション状況確認

現在のレプリケーションの状態を確認します。

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トランザクション」をスキップしているみたいです。

このことは公式ドキュメントに記載されています。


そのため、もしトランザクション内で正常な(影響のない)SQLがあっても、

それすらスキップしてしまうため、余計に整合性が取れなくなったりもします。


しっかり理解したうえでスキップしないといけないですね。


まぁそもそもでエラーにならないことが一番ですが・・・

Jervin Real(英語記事です)

Another reason why SQL_SLAVE_SKIP_COUNTER is bad in MySQL

まとめ

MySQLのレプリケーションでエラーが出た時の対処法でした。

エラーでないのが一番ですが、エラーになっても冷静に対処しましょう。

焦りすぎて余計ぐちゃぐちゃになってしまわないよう、お気を付けを・・。


以上、ここまで見ていただきありがとうございます。

皆さまの快適な開発ライフに、ほんの少しでもお役に立てれば幸いです。

コメント一覧

コメントがまだありません

コメントを投稿してみる

コメント(必須※500文字以内)

お名前(必須※30文字以内)

※日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)