MySQL マスタースレーブレプリケーションでエラーをスキップする方法

MySQL マスタースレーブレプリケーションでエラーをスキップする方法

1. 従来のbinlogマスタースレーブレプリケーション、エラー報告をスキップする方法

mysql> スレーブを停止します。
mysql> グローバル sql_slave_skip_counter を 1 に設定します。
mysql> スレーブを起動します。
mysql> スレーブステータスを表示 \G

2. GTIDマスタースレーブレプリケーション、エラー報告をスキップする方法

mysql> stop slave; #まずスレーブのレプリケーションをオフにします。
mysql> change master to ...省略... #マスタースレーブレプリケーションを構成します。
mysql> show slave status\G #マスタースレーブステータスを表示します。

エラーが見つかりました:

mysql>スレーブステータスを表示\G
************************** 1. 行 ****************************
        Slave_IO_State: マスターがイベントを送信するのを待機中
         マスターホスト: 172.19.195.212
         Master_User: マスタースレーブ
         マスターポート: 3306
        接続再試行: 60
       マスターログファイル:mysql-bin.000021
     読み取りマスターログ位置: 194
        リレーログファイル: nginx-003-relay-bin.000048
        リレーログ位置: 454
    リレーマスターログファイル: mysql-bin.000016
       スレーブIO実行中: はい
      スレーブSQL実行中: いいえ
       レプリケート_Do_DB: 
     レプリケート_無視_DB: 
      テーブルの複製: 
    無視テーブルを複製: 
   Replicate_Wild_Do_Table: 
 Replicate_Wild_Ignore_Table: 
          最終エラー番号: 1007
          Last_Error: クエリでエラー「データベース 'code' を作成できません。データベースが存在します」が発生しました。デフォルトのデータベース: 'code'。クエリ: 'データベース コードを作成'
         スキップカウンタ: 0
     実行マスターログポジション: 8769118
       リレーログスペース: 3500
       Until_Condition: なし
        ログファイルまで: 
        ログ位置まで: 0
      マスターSSL許可: いいえ
      マスターSSLCAファイル: 
      マスターSSLCAパス: 
       マスターSSL証明書: 
      マスターSSL暗号: 
        マスターSSLキー: 
    マスターより遅れている秒数: NULL
Master_SSL_Verify_Server_Cert: いいえ
        最終IOエラー番号: 0
        最後のIOエラー: 
        最終SQLエラー番号: 1007
        Last_SQL_Error: クエリでエラー「データベース 'code' を作成できません。データベースが存在します」が発生しました。既定のデータベース: 'code'。クエリ: 'create database code'
 Replicate_Ignore_Server_Ids: 
       マスターサーバーID: 100
         マスター_UUID: fea89052-11ef-11eb-b241-00163e00a190
       マスター情報ファイル: /usr/local/mysql/data/master.info
          SQL_遅延: 0
     SQL_残り遅延: NULL
   スレーブSQL実行状態: 
      マスター再試行回数: 86400
         マスターバインド: 
   最終IOエラータイムスタンプ: 
   最終 SQL エラー タイムスタンプ: 201022 09:31:29
        マスターSSL証明書: 
      マスターSSLCrlパス: 
      取得済み_Gtid_Set: fea89052-11ef-11eb-b241-00163e00a190:8-5617
      実行されたGtidセット: a56c9b04-11f1-11eb-a855-00163e128853:1-11224、
fea89052-11ef-11eb-b241-00163e00a190:1-5614
        自動位置: 1
     Replicate_Rewrite_DB: 
         チャンネル名: 
      マスター TLS バージョン: 
セット内の1行(0.01秒)

Slave_SQL_Running が NO であることがわかります。これは、取得されるバイナリ ログに問題があることを意味します。
Last_Error でおおよそのエラーも確認できます。(以前の操作から、マスター ライブラリのバイナリ ログにコード ライブラリを作成するための SQL ステートメントがあり、スレーブ ライブラリにこのライブラリを既に作成しているため、競合が発生していると考えられます。)

解決:

1. 以前の操作が明確な場合は、競合の原因となったライブラリを削除できます。
2. GTIDエラーのあるトランザクションをスキップする

--- 特定のエラー トランザクションを照会するには、Last_SQL_Errno エラー番号を使用します。mysql> select * from performance_schema.replication_applier_status_by_worker where LAST_ERROR_NUMBER=1007\G
************************** 1. 行 ****************************
     チャンネル名: 
      ワーカーID: 0
      スレッドID: NULL
    サービス状態: オフ
最後に確認された取引: fea89052-11ef-11eb-b241-00163e00a190:5615
  最終エラー番号: 1007
  LAST_ERROR_MESSAGE: クエリでエラー「データベース 'code' を作成できません。データベースが存在します」が発生しました。デフォルトのデータベース: 'code'。クエリ: 'データベース コードの作成'
 最終エラータイムスタンプ: 2020-10-22 09:31:29
セット内の 1 行 (0.00 秒)

mysql> スレーブを停止します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

--- エラーが見つかったトランザクションをスキップします(LAST_SEEN_TRANSACTIONの値)
mysql> @@session.gtid_next='fea89052-11ef-11eb-b241-00163e00a190:5615' を設定します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

mysql> 開始します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

--- gtid_next を設定すると gtid のライフサイクルが開始され、明示的にトランザクションを送信して終了する必要があるため、空のトランザクションを送信します。
mysql> コミット;
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

--- 自動モードに戻します。
mysql> @@session.gtid_next=自動を設定します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

mysql> スレーブを起動します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

上記の手順により、GTID エラーのあるトランザクションはスキップされます。スレーブを起動した後もエラーが続く場合は、この手順に従ってスキップを続けます。

経験者であれば、トランザクションを照会する必要はありません。Executed_Gtid_Set を通じて、エラーが発生したトランザクションは fea89052-11ef-11eb-b241-00163e00a190:5615 であると判断できます。トランザクションを実行すると、fea89052-11ef-11eb-b241-00163e00a190:1-5614 に到達したときにエラーが報告されるため、トランザクション 5615 でエラーが発生したと判断できるはずです。

上記は、MySQL マスタースレーブレプリケーションでエラーをスキップする方法の詳細です。MySQL のエラースキップの詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQL マスタースレーブレプリケーションにおける重複キーの問題を修正する方法
  • MySql マスタースレーブレプリケーションメカニズムの包括的な分析
  • MySQL マスタースレーブレプリケーションと読み取り書き込み分離の詳細な説明
  • MYSQL データベース GTID はマスタースレーブレプリケーションを実現します (超便利)
  • MySql マスタースレーブレプリケーションの実装原理と構成
  • MySQL マスタースレーブレプリケーションの原理と注意点
  • MySQL マスタースレーブレプリケーション構成プロセス
  • MySQL マスタースレーブレプリケーションの原理からインストールと設定までを包括的に解説します。
  • MySQL マスタースレーブレプリケーションのいくつかのレプリケーション方法の概要
  • MySQL マスタースレーブレプリケーション切断の一般的な修復方法

<<:  シンプルなドラッグ効果を実現するJavaScript

>>:  Nginx設定の原理と実装プロセスの詳細な説明https

推薦する

Linuxで中断されたシステムを呼び出す方法

序文低速システム コールとは、決して戻らない可能性があり、プロセスを永久にブロックするシステム コー...

あまり使われていない、または誤解されている HTML タグ 10 個

ここでは、あまり使われていない、または誤解されている 10 個の HTML タグを紹介します。あまり...

Mysql5.7 で中国語の文字化けの問題を解決する

MySQL 5.7 を使用すると、Web ターミナル経由でデータベースに中国語の文字を書き込むと文字...

JSONObject の使用方法の詳細な説明

JSONObject は単なるデータ構造であり、JSON 形式のデータ構造 ( key-value構...

Docker-compose におけるdepends_on 順序問題を解決する方法についての簡単な説明

コンテナをソートするためにdepends_onを使用しても、コンテナ間の依存関係の問題は完全には解決...

js で下線とキャメルケースの変換を実装する (複数の方法)

目次適用シナリオ:方法 1: 正規表現 (推奨)方法2: 配列のreduceメソッドを使用する方法3...

ApacheBench でマルチ URL をサポートする方法

標準の ab は単一の URI でのストレス テストのみをサポートしており、実際のニーズを満たしてい...

MySQL 学習ノート: 完全な SELECT ステートメントの使用例と詳細な説明

この記事では、MySQL 学習ノートの select ステートメントの完全な使用方法を例を使用して説...

MySQL 8.0.15 winx64 のインストールと設定方法のグラフィックチュートリアル (Windows の場合)

この記事では、MySQL 8.0.15 winx64のインストールと設定方法を参考までに紹介します。...

OpenLayersはポイントフィーチャーレイヤーの集約表示方法を実現します

目次1. はじめに2. ポイントフィーチャーレイヤーの集約3. 重合の特殊処理4. 重合の特殊処理 ...

Docker Compose で環境変数を参照する方法の例

プロジェクトでは、さまざまな条件や使用シナリオを制御するために、docker-compose.yml...

MYSQL ストアドプロシージャと関数の簡単な記述

ストアドプロシージャとは簡単に言えば、これは強力で、JAVA 言語のメソッドに似た比較的複雑な論理関...

Dockerを使用してElasticsearchクラスターを素早くデプロイする方法

この記事では、 Dockerコンテナ ( docker-composeを使用してオーケストレーション...

デザイナーはコーディングを学ぶ必要がありますか?

多くの場合、 Web デザインが完成した後でデザイナーの無知が露呈し、批判されることがあります。彼ら...

PHPのmail()関数を使用してメールを送信する

PHPのメール関数を使用してメールを送信するmail()関数はメールサーバーに接続し、サーバーと対話...