GTID の利点により、従来のファイル POS ベースのレプリケーションを GTID ベースのレプリケーションに変更する必要があります。オンラインで変更する方法が問題になります。具体的な方法は次のとおりです。 現在、従来のレプリケーションでは MS 構造が存在します。 ポート 3301 マスター ポート 3302 スレーブ マスター(3301)の場合: [zejin] 3301>t_usersから*を選択します。 +----+------+ | ID | 名前 | +----+------+ | 1 | ハオ | | 2 | 周 | +----+------+ セット内の行数 (0.00 秒) スレーブ(3302)の場合: [zejin] 3302>スレーブステータスを表示\G ************************** 1. 行 **************************** Slave_IO_State: マスターがイベントを送信するのを待機中 マスターホスト: 192.168.1.240 マスターユーザー: repl マスターポート: 3301 接続再試行: 60 マスターログファイル: binlog57.000002 読み取りマスターログ位置: 417 リレーログファイル: zejin240-relay-bin.000004 リレーログ位置: 628 リレーマスターログファイル: binlog57.000002 スレーブIO実行中: はい スレーブSQL実行中: はい レプリケート_Do_DB: レプリケート_無視_DB: テーブルの複製: 無視テーブルを複製: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: 最終エラー番号: 0 最終エラー: スキップカウンタ: 0 実行マスターログポジション: 417 リレーログスペース: 884 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: 3301 マスター_UUID: a97983fc-5a29-11e6-9d28-000c29d4dc3f マスター情報ファイル: /home/mysql/I3302/master.info SQL_遅延: 0 SQL_残り遅延: NULL Slave_SQL_Running_State: スレーブはすべてのリレーログを読み取りました。さらに更新を待機しています。 マスター再試行回数: 86400 マスターバインド: 最終IOエラータイムスタンプ: 最終SQLエラータイムスタンプ: マスターSSL証明書: マスターSSLCrlパス: 取得済み_Gtid_Set: 実行されたGtidセット: 自動位置: 0 Replicate_Rewrite_DB: チャンネル名: マスター TLS バージョン: セット内の行数 (0.00 秒) [zejin] 3302>t_usersから*を選択します。 +----+------+ | ID | 名前 | +----+------+ | 1 | ハオ | | 2 | 周 | +----+------+ セット内の行数 (0.00 秒) オンラインでの変更の具体的な手順は次のとおりです。 前提: 1. すべての MySQL バージョン 5.7.6 以上が必要です。 2. 現在のトポロジ内のすべての MySQL の gtid_mode 値がオフになっています。 3. 次の手順は順番に実行してください。スキップしないでください。 グローバル システム変数 GTID_MODE 変数値の説明を補足します。 OFF 新しいトランザクションは非 GTID です。スレーブは GTID のないトランザクションのみを受け入れます。GTID のあるトランザクションはエラーを報告します。 OFF_PERMISSIVE 新しいトランザクションは非GTIDであり、スレーブはGTIDのないトランザクションとGTIDのあるトランザクションの両方を受け入れます。 ON_PERMISSIVE 新しいトランザクションは GTID であり、スレーブは GTID なしのトランザクションと GTID ありのトランザクションの両方を受け入れます。 ON 新しいトランザクションはGTIDであり、スレーブはGTIDを持つトランザクションのみを受け入れます これらの値の変化は順序通りであることに注意すべきである。 オフ<--->OFF_PERMISSIVE<--->ON_PERMISSIVE<--->ON 実行にジャンプできません。エラーが報告されます。 ステップ 1:各 MySQL インスタンスで、 ENFORCE_GTID_CONSISTENCY を警告に設定します。どのインスタンスが最初に実行されるかは関係ありません。 [zejin] 3302> @@global.enforce_gtid_consistency=warn を設定します。 クエリは正常、影響を受けた行は 0 行 (0.00 秒) [zejin] 3301> @@global.enforce_gtid_consistency=warn を設定します。 クエリは正常、影響を受けた行は 0 行 (0.00 秒) 注: このステートメントを実行した後、GTID と互換性のないステートメントの使用があった場合、エラー ログに関連情報が記録されます。その後、互換性のないステートメントが生成されなくなるまで、互換性のない書き込みを回避するようにプログラムを調整する必要があります。プログラムを使用してすべての SQL ステートメントをチェックすることも、プログラムを設定して一定期間エラー ログを観察することもできます。この手順は非常に重要です。 ステップ 2:各 MySQL インスタンスで、ENFORCE_GTID_CONSISTENCY を ON に設定します。どのインスタンスが最初に実行されるかによって結果は影響を受けません。 最初のステップが完了したら、値をオンに設定できます。 [zejin] 3301> @@global.enforce_gtid_consistency=on を設定します。 クエリは正常、影響を受けた行は 0 行 (0.03 秒) [zejin] 3302> @@global.enforce_gtid_consistency を on に設定します。 クエリは正常、影響を受けた行は 0 行 (0.00 秒) ステップ3:各MySQLインスタンスで、GTID_MODEをoff_permissivに設定します。どちらが先に実行されても結果には影響しません。 [zejin] 3301> @@GLOBAL.GTID_MODE を OFF_PERMISSIVE に設定します。 クエリは正常、影響を受けた行は 0 行 (0.00 秒) [zejin] 3302> @@GLOBAL.GTID_MODE を OFF_PERMISSIVE に設定します。 クエリは正常、影響を受けた行は 0 行 (0.00 秒) ステップ 4:各 MySQL インスタンスで、GTID_MODE を on_permissive に設定します。どちらが最初に実行されても結果には影響しません。 [zejin] 3302> @@GLOBAL.GTID_MODE を on_permissive に設定します。 クエリは正常、影響を受けた行は 0 行 (0.00 秒) [zejin] 3301> @@GLOBAL.GTID_MODE を on_permissive に設定します。 クエリは正常、影響を受けた行は 0 行 (0.01 秒) ステップ5:各MySQLインスタンスの変数ONGOING_ANONYMOUS_TRANSACTION_COUNTを確認する [zejin] 3301> 'ONGOING_ANONYMOUS_TRANSACTION_COUNT'のようなステータスを表示します。 +-------------------------------------+-------+ | 変数名 | 値 | +-------------------------------------+-------+ | 進行中の匿名トランザクション数 | 0 | +-------------------------------------+-------+ セット内の行数 (0.02 秒) [zejin] 3302>「ONGOING_ANONYMOUS_TRANSACTION_COUNT」のようなステータスを表示します。 +-------------------------------------+-------+ | 変数名 | 値 | +-------------------------------------+-------+ | 進行中の匿名トランザクション数 | 0 | +-------------------------------------+-------+ セット内の行数 (0.02 秒) この変数が0になるまで待つ必要があります ステップ 6:すべての匿名トランザクション (非 GTID トランザクション) がすべてのサーバーに完全に複製されていることを確認します。 検査方法: マスター側: [zejin] 3301>マスターステータスを表示します。 +-----------------+----------+--------------+------------------+------------------+ | ファイル | 位置 | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +-----------------+----------+--------------+------------------+------------------+ | binlog57.000005 | 154 | | | | +-----------------+----------+--------------+------------------+------------------+ セット内の行数 (0.00 秒) 奴隷について [zejin] 3302>スレーブステータスを表示\G ************************** 1. 行 **************************** … リレーマスターログファイル: binlog57.000005 実行マスターログ位置: 154 … Relay_Master_Log_File の値が binlog57.000005 より大きいことを確認します。 または、Relay_Master_Log_Fileがbinlog57.000005に等しく、Exec_Master_Log_Posの値が154以上である または、スレーブは関数を直接使用します。 [zejin] 3302>MASTER_POS_WAIT('binlog57.000005', 154)を選択します。 +-----------------------------------------+ | MASTER_POS_WAIT('binlog57.000005', 154) | +-----------------------------------------+ | 0 | +-----------------------------------------+ セット内の行数 (0.00 秒) 返された結果が 0 以上の場合、すべての匿名トランザクションがコピーされたことを意味します。 ステップ 7:トポロジ全体に匿名トランザクションがないことを確認します。たとえば、以前に生成されたすべての匿名トランザクションが実行され、バイナリ ログに匿名トランザクションが存在しないようにします。ログをフラッシュして、MySQL に古いバイナリ ログ ファイルを自動的にクリーンアップさせることができます。 ステップ 8:各 MySQL インスタンスで、GTID_MODE をオンに設定します。 [zejin] 3301>SET @@GLOBAL.GTID_MODE = ON; クエリは正常、影響を受けた行は 0 行 (0.04 秒) [zejin] 3302> @@GLOBAL.GTID_MODE を ON に設定します。 クエリは正常、影響を受けた行は 0 行 (0.04 秒) ステップ 9:各 MySQL インスタンスの my.cnf 構成ファイルに gtid-mode=ON を追加します。 確認する: [zejin] 3301>t_users に値(3,'chen') を挿入します。 クエリは正常、1 行が影響を受けました (0.02 秒) [zejin] 3301>t_users を更新し、name='li' を設定し、id=1 を設定します。 クエリは正常、1 行が影響を受けました (0.03 秒) 一致した行: 1 変更された行: 1 警告: 0 [zejin] 3301>t_usersから*を選択します。 +----+------+ | ID | 名前 | +----+------+ | 1 | 李 | | 2 | 周 | | 3 | チェン | +----+------+ セット内の行数 (0.00 秒) [zejin] 3302>スレーブステータスを表示\G ************************** 1. 行 **************************** Slave_IO_State: マスターがイベントを送信するのを待機中 マスターホスト: 192.168.1.240 マスターユーザー: repl マスターポート: 3301 接続再試行: 60 マスターログファイル: binlog57.000006 読み取りマスターログ位置: 462 リレーログファイル: zejin240-relay-bin.000012 リレーログ位置: 673 リレーマスターログファイル: binlog57.000006 スレーブIO実行中: はい スレーブSQL実行中: はい レプリケート_Do_DB: レプリケート_無視_DB: テーブルの複製: 無視テーブルを複製: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: 最終エラー番号: 0 最終エラー: スキップカウンタ: 0 実行マスターログポジション: 462 リレーログスペース: 969 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: 3301 マスター_UUID: a97983fc-5a29-11e6-9d28-000c29d4dc3f マスター情報ファイル: /home/mysql/I3302/master.info SQL_遅延: 0 SQL_残り遅延: NULL Slave_SQL_Running_State: スレーブはすべてのリレーログを読み取りました。さらに更新を待機しています。 マスター再試行回数: 86400 マスターバインド: 最終IOエラータイムスタンプ: 最終SQLエラータイムスタンプ: マスターSSL証明書: マスターSSLCrlパス: 取得済み_Gtid_Set: a97983fc-5a29-11e6-9d28-000c29d4dc3f:1-2 実行されたGtidセット: a97983fc-5a29-11e6-9d28-000c29d4dc3f:1-2 自動位置: 0 Replicate_Rewrite_DB: チャンネル名: マスター TLS バージョン: セット内の行数 (0.00 秒) これにより、従来のレプリケーションから GTID レプリケーションへのオンライン変換が完了します。 MySQL 5.7 の業務を停止せずに従来のレプリケーションを GTID レプリケーションに変更する上記の例は、私が皆さんと共有したいことのすべてです。これが皆さんの参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: SSH ポート転送、ローカル ポート転送、リモート ポート転送、動的ポート転送の詳細
デザインの分野では、毎年さまざまなデザインのトレンドや流行があります。たとえば、近年のレスポンシブデ...
純粋な HTML + CSS を使ってドラえもんの絵を描くなど、CSS 描画に関する記事をよく見かけ...
この記事は元々ブロガーのWeiwei Miaoによって書かれたものです。ブログホームページ: htt...
前面に書かれた今日のインターネット分野では、Nginx は最も広く使用されているプロキシ サーバーの...
この記事では、参考までにMySQL8.0.11のインストールと設定方法、およびMySQL8.0の新し...
この記事では、天気予報機能を実現するためのVueの具体的なコードを参考までに共有します。具体的な内容...
目次コードの最適化v-for でキーを使用するv-if/v-else-if/v-else でキーを使...
私が書いた内容が理解できない場合は、インターネット上に理解できるチュートリアルがない可能性があります...
目次序文1. リクエスト内容が大きすぎる解決: CDN の紹介リクエストリソースを圧縮する1. HT...
Vue プロジェクトを開発する場合、さまざまなコンポーネント ページを表示するために切り替えることが...
目次1. はじめに1.1 Babel トランスコーダ1.2 ポリフィル2. let と const ...
目次1. カスタム指示の登録1.1. グローバルカスタム指示1.2. ローカルカスタム指示2. カス...
nginx でファイルサーバーを構築することもありますが、これは一般に公開されていますが、サーバーが...
ウェブサイトを作成している際に、flv や MP4 形式などのビデオ ファイルはローカルでは正常に再...