MySQL5.6 GTIDモードで同期レプリケーションエラーをスキップできない問題の解決方法

MySQL5.6 GTIDモードで同期レプリケーションエラーをスキップできない問題の解決方法

データベースバージョン:

mysql> select version();

+------------+
| バージョン() |
+------------+
| 5.6.10-ログ |
+------------+
セット内の1行(0.02秒)

同期レプリケーション情報:

mysql> show slave status\G;

************************** 1. 行 ****************************
Slave_IO_State: マスターがイベントを送信するのを待機中
マスターホスト: 192.168.8.25
マスターユーザー: repl
マスターポート: 3306
接続再試行: 60
マスターログファイル:mysql-bin.000007
読み取りマスターログ位置: 5036
リレーログファイル: M2-relay-bin.000008
リレーログ位置: 408
リレーマスターログファイル: mysql-bin.000007
スレーブIO実行中: はい
スレーブSQL実行中: いいえ
レプリケート_Do_DB:
レプリケート_無視_DB: mysql
テーブルの複製:
無視テーブルを複製:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
最終エラー番号: 1062
Last_Error: テーブル test.t で Write_rows イベントを実行できませんでした。エントリ '12' が重複しています。
キー 'PRIMARY'、Error_code: 1062、ハンドラー エラー HA_ERR_FOUND_DUPP_KEY、イベントのマスター ログ mysql-bin.000007、
終了ログ位置 2267
スキップカウンタ: 0
実行マスターログポジション: 2045
リレーログスペース: 3810
Until_Condition: なし
ログファイルまで:
ログ位置まで: 0
マスターSSL許可: いいえ
マスターSSLCAファイル:
マスターSSLCAパス:
マスターSSL証明書:
マスターSSL暗号:
マスターSSLキー:
マスターより遅れている秒数: NULL
Master_SSL_Verify_Server_Cert: いいえ
最終IOエラー番号: 0
最後のIOエラー:
最終SQLエラー番号: 1062
Last_SQL_Error: テーブル test.t で Write_rows イベントを実行できませんでした。エントリ '12' が重複しています。
キー 'PRIMARY'、Error_code: 1062、ハンドラー エラー HA_ERR_FOUND_DUPP_KEY、イベントのマスター ログ mysql-bin.000007、
終了ログ位置 2267
Replicate_Ignore_Server_Ids:
マスターサーバー ID: 25
マスター_UUID: cf716fda-74e2-11e2-b7b7-000c290a6b8f
マスター情報ファイル: /usr/local/mysql/data2/master.info
SQL_遅延: 0
SQL_残り遅延: NULL
スレーブSQL実行状態:
マスター再試行回数: 86400
マスターバインド:
最終IOエラータイムスタンプ:
最終 SQL エラー タイムスタンプ: 130313 07:24:43
マスターSSL証明書:
マスターSSLCrlパス:
取得済み_Gtid_セット: cf716fda-74e2-11e2-b7b7-000c290a6b8f:141-151
実行されたGtidセット: cf716fda-74e2-11e2-b7b7-000c290a6b8f:1-140
自動位置: 1
セット内の1行(0.02秒)

エラー:
クエリが指定されていません

主キーの競合を促します。テスト機なのでそのままスキップします。

mysql> set global sql_slave_skip_counter=1;

エラー 1858 (HY000): サーバーが GTID_MODE = ON で実行されている場合、sql_slave_skip_counter を設定することはできません。
代わりに、スキップしたいトランザクションごとに、そのトランザクションと同じGTIDを持つ空のトランザクションを生成します。

ヒント: GTID モードで実行されるため、 sql_slave_skip_counter構文はサポートされていません。スキップする場合は、トランザクション ID を null 値に設定する必要があります。
これが唯一の方法のようです。

mysql> show global variables like '%GTID%';

+--------------------------+------------------------------------------+
| 変数名 | 値 |
+--------------------------+------------------------------------------+
| 強制GTID一貫性 | オン |
| gtid_executed | cf716fda-74e2-11e2-b7b7-000c290a6b8f:1-140 |
| gtid_mode | オン |
| gtid_owned | |
| gtid_purged | cf716fda-74e2-11e2-b7b7-000c290a6b8f:1-140 |
+--------------------------+------------------------------------------+
セットに5行(0.04秒)

mysql> グローバル gtid_executed='' を設定します。
エラー 1238 (HY000): 変数 'gtid_executed' は読み取り専用変数です
マイSQL>
mysql> グローバル gtid_purged='' を設定します。

エラー 1840 (HY000): GTID_PURGED は、GTID_EXECUTED が空の場合にのみ設定できます。
イライラします。直接的な設定が機能しません。

マニュアルを確認した後、マスターのリセットを実行する必要があることがわかりました (注意: スレーブで実行し、マスターでは実行しないでください)。

mysql> マスターをリセットします。
クエリは正常、影響を受けた行は 0 行 (0.16 秒)

mysql> スレーブをリセットします。
エラー 1198 (HY000): この操作は実行中のスレーブでは実行できません。まず STOP SLAVE を実行してください。
mysql> スレーブを停止します。
クエリは正常、影響を受けた行は 0 行 (0.08 秒)

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

reset slave を実行する目的は、master.info と relay-log.info をクリアして、後でマスターをマスター スレーブ レプリケーションに変更できるようにすることです。
先ほどの gtid_purged ポイントを覚えていますか? 次のポイントをリセットするだけです。

手順は次のとおりです。

mysql> '%GTID%' のようなグローバル変数を表示します。
+--------------------------+-------+
| 変数名 | 値 |
+--------------------------+-------+
| 強制GTID一貫性 | オン |
| gtid_executed | |
| gtid_mode | オン |
| gtid_owned | |
| gtid_purged | |
+--------------------------+-------+
セットに5行(0.06秒)

mysql> グローバル gtid_purged='cf716fda-74e2-11e2-b7b7-000c290a6b8f:1-141' を設定します。
クエリは正常、影響を受けた行は 0 行 (0.16 秒)

mysql> マスターを MASTER_HOST='192.168.8.25'、MASTER_USER='repl'、MASTER_PASSWORD='repl' に変更します
、MASTER_AUTO_POSITION = 1;
クエリは正常、影響を受けた行は 0 行、警告は 2 個 (0.32 秒)

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

mysql> スレーブステータスを表示します\G;
************************** 1. 行 ****************************
Slave_IO_State: マスターがイベントを送信するのを待機中
マスターホスト: 192.168.8.25
マスターユーザー: repl
マスターポート: 3306
接続再試行: 60
マスターログファイル:mysql-bin.000007
読み取りマスターログ位置: 5036
リレーログファイル: M2-relay-bin.000008
リレーログ位置: 408
リレーマスターログファイル: mysql-bin.000007
スレーブIO実行中: はい
スレーブSQL実行中: いいえ
レプリケート_Do_DB:
レプリケート_無視_DB: mysql
テーブルの複製:
無視テーブルを複製:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
最終エラー番号: 1050
Last_Error: クエリでエラー「テーブル 't0' は既に存在します」が発生しました。
デフォルトのデータベース: 'test'。クエリ: 'create table t0 like t'
スキップカウンタ: 0
実行マスターログ位置: 2298
リレーログスペース: 3557
Until_Condition: なし
ログファイルまで:
ログ位置まで: 0
マスターSSL許可: いいえ
マスターSSLCAファイル:
マスターSSLCAパス:
マスターSSL証明書:
マスターSSL暗号:
マスターSSLキー:
マスターより遅れている秒数: NULL
Master_SSL_Verify_Server_Cert: いいえ
最終IOエラー番号: 0
最後のIOエラー:
最終SQLエラー番号: 1050
Last_SQL_Error: クエリでエラー「テーブル 't0' は既に存在します」が発生しました。
デフォルトのデータベース: 'test'。クエリ: 'create table t0 like t'
Replicate_Ignore_Server_Ids:
マスターサーバー ID: 25
マスター_UUID: cf716fda-74e2-11e2-b7b7-000c290a6b8f
マスター情報ファイル: /usr/local/mysql/data2/master.info
SQL_遅延: 0
SQL_残り遅延: NULL
スレーブSQL実行状態:
マスター再試行回数: 86400
マスターバインド:
最終IOエラータイムスタンプ:
最終 SQL エラー タイムスタンプ: 130313 07:50:42
マスターSSL証明書:
マスターSSLCrlパス:
取得済み_Gtid_セット: cf716fda-74e2-11e2-b7b7-000c290a6b8f:142-151
実行されたGtidセット: cf716fda-74e2-11e2-b7b7-000c290a6b8f:1-141
自動位置: 1
セット内の1行(0.02秒)

エラー:
クエリが指定されていません
### ご覧のとおり、ここでのエラー メッセージが異なります。同期レプリケーションが正常になるまでこの方法を繰り返します。

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

mysql> マスターをリセットします。
クエリは正常、影響を受けた行は 0 行 (0.17 秒)

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

mysql> グローバル gtid_purged='cf716fda-74e2-11e2-b7b7-000c290a6b8f:1-151' を設定します。
クエリは正常、影響を受けた行は 0 行 (0.13 秒)

mysql> マスターを MASTER_HOST='192.168.8.25'、MASTER_USER='repl'、MASTER_PASSWORD='repl' に変更します
、MASTER_AUTO_POSITION = 1;
クエリは正常、影響を受けた行は 0 行、警告は 2 件 (0.33 秒)

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

mysql> スレーブステータスを表示します\G;
************************** 1. 行 ****************************
Slave_IO_State: マスターがイベントを送信するのを待機中
マスターホスト: 192.168.8.25
マスターユーザー: repl
マスターポート: 3306
接続再試行: 60
マスターログファイル:mysql-bin.000007
読み取りマスターログ位置: 5036
リレーログファイル: M2-relay-bin.000008
リレーログ位置: 408
リレーマスターログファイル: mysql-bin.000007
スレーブIO実行中: はい
スレーブSQL実行中: はい
レプリケート_Do_DB:
レプリケート_無視_DB: mysql
テーブルの複製:
無視テーブルを複製:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
最終エラー番号: 0
最終エラー:
スキップカウンタ: 0
実行マスターログ位置: 5036
リレーログスペース: 819
Until_Condition: なし
ログファイルまで:
ログ位置まで: 0
マスターSSL許可: いいえ
マスターSSLCAファイル:
マスターSSLCAパス:
マスターSSL証明書:
マスターSSL暗号:
マスターSSLキー:
マスターより遅れている秒数: 0
Master_SSL_Verify_Server_Cert: いいえ
最終IOエラー番号: 0
最後のIOエラー:
最終SQLエラー番号: 0
最後のSQLエラー:
Replicate_Ignore_Server_Ids:
マスターサーバー ID: 25
マスター_UUID: cf716fda-74e2-11e2-b7b7-000c290a6b8f
マスター情報ファイル: /usr/local/mysql/data2/master.info
SQL_遅延: 0
SQL_残り遅延: NULL
Slave_SQL_Running_State: スレーブはすべてのリレー ログを読み取りました。スレーブ I/O スレッドがそれを更新するのを待機しています。
マスター再試行回数: 86400
マスターバインド:
最終IOエラータイムスタンプ:
最終SQLエラータイムスタンプ:
マスターSSL証明書:
マスターSSLCrlパス:
取得済み_Gtid_Set:
実行されたGtidセット: cf716fda-74e2-11e2-b7b7-000c290a6b8f:1-151
自動位置: 1
セット内の1行(0.01秒)

エラー:
クエリが指定されていません

ハハハ、やっと解決しました。本当に面倒な問題でした。より良く、より便利な解決策がありましたら、私に返信してください。ありがとうございます。

以下もご興味があるかもしれません:
  • MySQL マスタースレーブレプリケーションの GTID モードの詳細な紹介
  • MYSQL データベース GTID はマスタースレーブレプリケーションを実現します (超便利)
  • MySQL 5.7 で業務を停止せずに従来のレプリケーションを GTID レプリケーションに変更する例
  • MySQL マスタースレーブレプリケーションの実践の詳細説明 - GTID ベースのレプリケーション
  • GTID に基づく MySQL 5.6 マスタースレーブ レプリケーション
  • MySQL での GTID レプリケーション プロトコルと停止プロトコルの使用に関するチュートリアル
  • MySQL レプリケーションにおける GTID レプリケーションの具体的な使用法

<<:  jQuery をベースにリスト ループ スクロールを実装するためのヒント (超簡単)

>>:  よく使われるLinuxコマンド「ll」が無効、またはコマンドが見つからないという問題を解決します

推薦する

進捗バー効果を実現するJavaScript

この記事では、プログレスバー効果を実現するためのJavaScriptの具体的なコードを参考までに紹介...

jsはテーブルの追加と削除の操作を動的に実装します

この記事の例では、jsでテーブルを動的に追加および削除するための具体的なコードを参考までに共有してい...

MySQL ストアド プロシージャのクエリ コマンドの概要

以下のように表示されます。 mysql.proc から名前を選択します (db='データベー...

Facebook 出会い系サイトデザインのユーザー エクスペリエンス分析

<br />関連記事: Facebookの情報アーキテクチャの分析 元記事: http:...

altとtitleの違いの詳しい説明

これら 2 つの属性はよく使用されますが、その違いはまとめられていません。それでは、その使い方をまと...

複数の条件を持つ MySQL クエリ メソッド

複数の条件を持つ MySQL クエリ環境: MySQL 5.7 where ステートメントに複数の ...

MySQL で置換操作を使用したときにデータ損失が発生する問題の解決策

序文同社の開発者は、データの更新時に replace into ステートメントを使用していました。不...

MySQL グリーン解凍バージョンのインストールと設定手順

手順: 1. MySQLデータベースをインストールする1. MySQL-5.6.17-winx64....

ウェブサイトデザインの基礎知識:初心者の方はぜひお読みください

今では多くの人がウェブサイト作成に参加していますが、ウェブサイトはどのように作成すればよいのでしょう...

Dockerでのpython3.8イメージのインストールについて

Docker Hub公式サイト1. Pythonミラーを検索するdocker 検索 python 2...

JavaScript における this ポイントの問題の詳細な説明

要約する地球環境 ➡️ ウィンドウ通常関数 ➡️ ウィンドウまたは未定義コンストラクター ➡️ 構築...

要素 DateTimePicker+vue ポップアップボックスに時間のみが表示される問題を解決する

3つの知識ポイント: 1. CSS子孫セレクターhttps://www.w3school.com.c...

IE 8/Chrome/Firefox と互換性のあるコメント返信ポップアップマスク効果実装アイデア

平日はニュースに注目して、テンセントをよく閲覧しています。しかし、コメントへの返信はほとんど見られま...

自作の Windows サーバーに egg アプリケーションを展開する方法 (画像とテキスト付き)

1. IEブラウザを使用してVPNにログインする 2. リモートログイン 3. サーバーに最新のn...