データベースバージョン: 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 レプリケーションの具体的な使用法
|