MySQL マスタースレーブレプリケーション切断の一般的な修復方法

MySQL マスタースレーブレプリケーション切断の一般的な修復方法

01 問題の説明

実稼働環境では、MySQL のマスター スレーブ レプリケーションが切断される状況によく遭遇します。マスター スレーブ レプリケーションが切断された場合、通常、問題を解決する手順は次のとおりです。

1. データベースで show slave status を使用して、レプリケーション切断の直感的な理由を確認し、現在のレプリケーション場所を記録します。

2. エラーログをチェックして、レプリケーション切断の理由をより詳しく分析します。

3. マスターとスレーブのレプリケーション関係を修復する

4. レプリケーション関係を修復できない場合は、スレーブデータベースを再構築する必要があります。

02 ソリューション

マスターとスレーブのレプリケーション関係が壊れる理由はさまざまです。アプリケーションが使用できず、すぐに復旧する必要があるため、原因を客観的に分析する時間がない場合があります。この場合、レプリケーションの中断の問題とサービスの可用性の間でトレードオフを行い、それに応じて対処する必要があります。

マスターとスレーブ間のレプリケーションの中断を解決する一般的な方法は次のとおりです。

1. 他のスレーブライブラリを見つけてすぐに置き換える

この方法では、アプリケーションに少なくとも 1 つのマスターと 2 つのスレーブのアーキテクチャが必要です。スレーブ ライブラリの 1 つに問題が発生した場合、他のスレーブ ライブラリをすぐにオンラインにしてアプリケーション アクセスを復元し、障害が発生したスレーブ ライブラリの問題の具体的な原因を後で調査できます。

2. コピー失敗のエラーをスキップする

場合によっては、マスターとスレーブ間のレプリケーションが切断される理由を特定できます。たとえば、マスターにスレーブよりも 1 つ多いデータベース db_1 がある場合、マスターで drop database db_1 を実行すると、スレーブのレプリケーションは確実に切断されます。この場合は、トランザクションをスキップすることで解決できます。

方法 1: (現在のトランザクションを直接スキップする)

GTID モードでは、次のコマンドで解決できます。

mysql> スレーブを停止します。
mysql> SET GTID_NEXT='xxxxxx:yyy'; ----- スキップするgtidイベントを設定します
mysql> BEGIN;COMMIT;
mysql> GTID_NEXT='AUTOMATIC' を設定します。
mysql>スレーブを起動します。

非 GTID モードでは、次のコマンドで解決できます。

奴隷を停止します。
sql_slave_skip_counterを1に設定します。
スレーブを起動します。

方法2: (新しい場所を指定する)

バイナリログ分析を通じて次のトランザクションの具体的な場所がわかっている場合は、次のトランザクションの具体的な場所を指定しても解決できます。

GTID モードの場合:

mysql> スレーブを停止します。
mysql> マスターをリセットします。
mysql> SET @@GLOBAL.GTID_PURGED ='xxxxxxx:yyyyyy' ----- は、これらの gtid イベントが実行されたことを示します。mysql> START SLAVE;

GTID_PURGED は GLOBAL でなければならないことに注意してください。上記のコマンドは、set global gtid_purged='xxx:yyy' と記述することもできます。

非GTIDモードの場合:

奴隷を停止します。
マスターをmaster_log_file='mysql-bin.001360'、master_log_pos=676383371に変更します。
スレーブを起動します。

方法3: pt-slave-restartツール

トランザクションをスキップしても切断が続く場合 (たとえば、スレーブ データベースで 100 個のデータを削除したが、マスター データベースでこれらの 100 個のデータを更新する場合)、切断された位置を継続的にスキップできる pt-slave-restart ツールを使用できます。

使い方は次のとおりです:

pt-slave-restart -h 10.xxx.xxx.xxx -P ポート -u ユーザ -p パスワード

並列レプリケーションを使用すると、pt-slave-restart がエラーを報告する場合があります。このとき、並列レプリケーションをシングルスレッド レプリケーションに変更してから、pt-slave-restart ツールを使用できます。次の記事を参照してください。

pt-slave-restart ツール

方法4: パラメータslave_exec_modeを設定する

このパラメータは、マスタースレーブレプリケーションプロセス中のスレーブライブラリ実行モードを変更できます。厳密モードに設定すると、エラーが報告されるとすべてのレプリケーションが停止します。べき等モードに設定すると、特定のエラー番号のエラーはスキップされます。コマンドは次のとおりです。

グローバルslave_exec_modeをidempotentに設定する

詳細については、前回の記事を参照してください。

MySQL レプリケーション問題の 3 つのパラメータの紹介

この記事には、レプリケーション エラーをスキップするための他の 2 つのパラメーター、slave_skip_errors と sql_slave_skip_counter があります。

3. バックアップを使用してスレーブライブラリを再構築する

この方法は多くのシナリオでは使用されません。通常、この方法は、スレーブ ライブラリが使用できないか、マスター ライブラリと同期できない場合にのみ検討されます。たとえば、マスター ライブラリでマスター リセット操作が実行され、すべてのバイナリ ログがクリアされます。この場合、スレーブ ライブラリは正しいバイナリ ログを取得して読み取ることができず、レプリケーションが切断されます。この場合、スレーブ ライブラリを再構築することが唯一の方法である可能性があります。

上記は、MySQL マスター スレーブ レプリケーション切断の一般的な修復方法の詳細です。MySQL マスター スレーブ レプリケーション切断の修復の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQL5.7 並列レプリケーションの原理と実装
  • MySQL マスタースレーブレプリケーションと読み取り書き込み分離の詳細な説明
  • MySQL レプリケーション問題の 3 つのパラメータの分析
  • MySql マスタースレーブレプリケーションメカニズムの包括的な分析
  • MySQL シリーズ 13 MySQL レプリケーション

<<:  ユニアプリプロジェクトでのウォーターフォールレイアウトの実装

>>:  JavaScriptの厳密モードが8進数をサポートしていない問題の説明

推薦する

Linux オペレーティング システムの概要と紹介

目次1. オペレーティングシステムとは何か2. Linuxの起源3. Linuxの基本機能4. Li...

MySQLのジョイントクエリについて詳しく説明します

目次ユニオンクエリ1. 中国の各省のIDと名前を照会する2. 湖南省のすべての地級市のIDと名称3....

Navicat PremiumでSQLファイルをインポートする方法

今日、最終プロジェクトに取り組み始めましたが、今年はMySQLデータベースを使用したため、Navic...

Ubuntu での MySQL へのリモート ログインのインストールと設定に関するチュートリアル

この記事では、MySQLのインストールと設定のリモートログインチュートリアルを参考までに紹介します。...

Nginx+Apache の動的および静的分離の導入の詳細な例

Nginx の動的および静的分離の概要Nginx は静的処理能力が強力ですが、動的処理能力が不十分で...

CSS オーバーフローラップの新しいプロパティ値をどこでも使用

1.まず、overflow-wrap属性を理解する CSS のoverflow-wrapプロパティは...

jQuery+h5 で 9 マス抽選特殊効果を実現 (フロントエンドとバックエンドのコード)

序文:フロントエンド: jq+h5 で 9 グリッドのダイナミック効果を実現バックエンド: thin...

jsはタイトルと説明のキーワードを検出し、見つかった場合は置換するか他のページにジャンプします。

キーワード 一般タイトルには、クラック、キー、シリアル番号、キージェネレータなどの単語を含めることは...

Linux での scp および sftp コマンドの詳細な説明

目次序文1. SCPの使用法2. sftpを使用する3. scp と sftp の違いは何ですか?ど...

Ubuntu サーバーで MySQL を設定し、リモート接続を実装する方法

サーバー: Ubuntu Server 16.04 LSSクライアント: Ubuntu 16.04 ...

docker runとstartの違い

docker における実行と開始の違いDocker run はミラーイメージを指定します。そしてdo...

【HTML要素】タグテキストの詳細説明

1. 基本的なテキスト要素を使用してコンテンツをマークアップするまず表示効果を見てみましょう:対応す...

JavaScript で同時実行制御を実装する方法

目次1. 同時実行制御の概要1.1 フェーズ1 1.2 フェーズ2 1.3 フェーズ3 2. 同時実...

docker-compsoe を使用してフロントエンドとバックエンドを分離したプロジェクトをデプロイする方法

事前に言っておくDocker を使用すると非常にシンプルなデプロイメント環境を実現できることは誰もが...

Zabbix上のすべてのホストのIPとホスト名を取得する

ザビックスZabbix ([`zæbiks]) は、WEB インターフェースに基づいて分散システム監...