ヘッダー画像

【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があっても、
それすらスキップしてしまうため、余計に整合性が取れなくなったりもします。

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

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

まとめ

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

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

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

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

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

コメント

この記事のコメントはありません。