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」が無効、またはコマンドが見つからないという問題を解決します

推薦する

jsonファイルの書き方の詳細説明

目次JSONとはなぜこの技術なのでしょうか? JSONの使い方- データ形式- メモ- JSには2つ...

不規則な投影を実現するためのボックスシャドウとドロップシャドウのサンプルコード

border-radius で生成できる四角形やその他の図形に影を追加する場合 (「Adaptive...

CentOS7でFTPサーバーを設定する方法

FTP は主にファイル転送に使用され、Linux では vsftpd で実装されるのが一般的です。F...

Vue h関数の使い方の詳しい説明

目次1. 理解2. 使用1. h() パラメータ2. 使い方が簡単3. カウンターケースを実装する4...

コンポーネントベースのフロントエンド開発プロセスの詳細な説明

背景<br />フロントエンドを担当する学生は、ページが多すぎると煩雑になるため、開発プ...

Mac インストール mysqlclient プロセス分析

仮想環境で pip 経由でインストールしてみてください: pip で mysqlclient をイン...

MYSQLでリモートアクセス権限を有効にする方法

1. MySQLデータベースにログインするmysql -u ルート -pユーザーテーブルを表示する ...

JavaScript は div マウス ドラッグ効果を実装します

この記事では、divマウスドラッグ効果を実現するためのJavaScriptの具体的なコードを参考まで...

nginxを使用してドメイン名ベースの仮想ホストを構成する

1. 仮想ホストとは何ですか?仮想ホストは、特殊なテクノロジーを使用して、実行中のサーバーを論理的に...

Nginx 設定場所のマッチング優先順位の簡単な分析

序文Nginx 構成のサーバー ブロック内の場所は、リクエスト URI を一致させるために使用され、...

ユーザーはその理由を知る必要がある

証券会社にいた頃、設計業務が忙しくなかったため、商品のマニュアルを書く役割を担ったことがありました。...

シンプルな画像ドラッグ効果を実現する js

この記事では、簡単な画像ドラッグ効果を実現するためのjsの具体的なコードを参考までに紹介します。具体...

MySQL はカスタムシーケンスを使用して row_number 関数を実装します (詳細な手順)

いくつかの記事を読んだ後、ようやく MySQL で row_number() ソートを実装する方法が...

Vue3 親子コンポーネントパラメータ転送における sync 修飾子の使用法の詳細な説明

目次一方向データフローの説明Vue2.x の使用法親コンポーネントに変更を通知するイベントのフォーム...

MySQL 5.7.20 のインストールと設定方法のグラフィック チュートリアル (win10)

この記事では、MySQL 5.7.20のインストールと設定方法を参考までに紹介します。具体的な内容は...