MySQL で GTID モードをオンラインで有効または無効にする

MySQL で GTID モードをオンラインで有効または無効にする

基本的な概要

MySQL にはレプリケーション同期を指定する 2 つの方法があることがわかっています。

  1. バイナリログファイル名と場所の指定
    - 匿名トランザクション (Anonymous_gtid_log_event)
  2. GTID(グローバルトランザクションID)ベースの仕様
    - GTIDトランザクション(Gtid_log_event)

GTID ベースの方法は、1 つのマスターと複数のスレーブのアーキテクチャでのマスターとスレーブの切り替えに明らかな利点があり、日常的なレプリケーションの異常のトラブルシューティングにも便利です。MySQL 5.7.6 以降では、GTID モードの動的なオープンとクローズがサポートされています。パラメータ GTID_MODE には次の値があります。

  • OFF - 匿名トランザクションのみの複製を許可する
  • OFF_PERMISSIVE - 新しく生成されたトランザクションは匿名トランザクションですが、GTIDトランザクションも複製および同期できます。
  • ON_PERMISSIVE - 新しく生成されたトランザクションはGTIDトランザクションですが、匿名トランザクションも複製および同期できます。
  • ON - GTIDトランザクションのみを複製できるようにする

GTIDをオンラインで有効にする

1. GTID検証ENFORCE_GTID_CONSISTENCYをWARNに設定する

この操作の目的は、マスターデータベースで実行されるSQL文がGTID整合性チェックに違反することを許可し、マスターデータベースのエラーログに警告レベルのログのみをリマインダーとして出力することです。これは、レプリケーションモードをGTIDモードに変更した場合、GTIDのいくつかの制限によりアプリケーションが異常なエラーを引き起こさないことを考慮するためです。

たとえば、CREATE TABLE AS SELECT 構文は GTID モードではサポートされておらず、ENFORCE_GTID_CONSISTENCY が​​ WARN に設定されている場合、エラー ログには直接的なエラー メッセージではなく、エラー メッセージのみが表示されます。

## この操作は、マスター データベースとスレーブ データベースの両方で実行されます。 SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = WARN;

2. GTID検証ENFORCE_GTID_CONSISTENCYをONに設定する

一定期間(厳しい状況では 1 日以上)観察した後、前の手順のエラー ログに該当する警告情報が表示されていないことを確認してから、GTID 整合性チェックを正式に有効にします。ON に設定すると、CREATE TABLE AS SELECT ステートメントを再度実行すると、エラーが直接報告されます。

## この操作はマスター データベースとスレーブ データベースの両方で実行されます SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = ON;

3. GTID_MODEをOFF_PERMISSIVEに設定する

この操作は遷移属性であり、新しく生成されたトランザクションがまだ匿名トランザクションであることを示しますが、GTID トランザクションを複製および同期することもできます。

## この操作は、マスター データベースとスレーブ データベースの両方で実行されます。 SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;

4. GTID_MODEをON_PERMISSIVEに設定する

この操作はまだ移行属性であり、新しく生成されたすべてのトランザクションは GTID トランザクションであることを意味しますが、匿名トランザクションも複製できます。

## この操作はマスター データベースとスレーブ データベースの両方で実行されます SET @@GLOBAL.GTID_MODE = ON_PERMISSIVE;

5. (キーポイント) 匿名トランザクションが再生されることを確認する

この手順の目的は、完全な GTID モードへの正式な変換の前にすべての古い匿名トランザクションが再生され、GTID_MODE が ON に設定されている場合に、残りの匿名トランザクションによってレプリケーション同期エラーが発生しないようにすることです。これを確認するには、次の 2 つの方法があります。

## この操作はスレーブ データベースでのみ実行できます。## 方法 1: ステータス値によって出力される匿名トランザクションの数が 0 であることを確認します (注: 0 が表示されている場合は、ステータス値が後で 0 から 0 より大きい値に変わったとしても、変換が完了したことを意味します)
'ONGOING_ANONYMOUS_TRANSACTION_COUNT' のようなステータスを表示します。

## スレーブ データベースでこのステートメントを複数回実行します。## 方法 2: ビュー LAST_SEEN_TRANSACTION をクエリして、現在同期されているトランザクションにまだ ANONYMOUS トランザクションがあるかどうかを確認します。select * from performance_schema.replication_applier_status_by_worker;

匿名トランザクションの数が0であることを確認してください

再生スレッドによって再生されるすべてのトランザクションがGTIDトランザクションであることを確認する

6. ログ切り替えのラウンドをトリガーする FLUSH LOGS

この操作の目的は、マスター データベースでバイナリ ログのローテーションをトリガーして、新しく生成されたバイナリ ログがすべて GTID を含むトランザクションになるようにすることです (バイナリ ログに 2 種類のトランザクション ログが含まれることを防ぐため)。

## この操作はメイン データベース FLUSH LOGS でのみ実行できます。

7. GTID_MODEを正式にオンにする

GTIDを正式に開始

## この操作はマスター データベースとスレーブ データベースの両方で実行されます SET @@GLOBAL.GTID_MODE = ON;
@@GTID_MODE、@@ENFORCE_GTID_CONSISTENCY を選択します。

8. GTIDパラメータの永続性を確保するために設定ファイルを変更する

再起動が失敗しないようにするには、my.cnf 構成ファイルに GTID パラメータを追加します。この操作は最初の手順でも実行できます。

## この操作は、gtid-mode = ON のマスターデータベースとスレーブデータベースの両方で実行されます。
強制GTID一貫性 = 1

9. レプリケーションモードをGTIDモードに変更する

レプリケーションモードをPOSベースからGTIDベースに変更する

## レプリケーションを停止します STOP SLAVE;

## GTID モードに変更 CHANGE MASTER TO MASTER_AUTO_POSITION = 1;

## レプリケーションを開始します START SLAVE;

## レプリケーション同期ステータスを確認する SHOW SLAVE STATUS\G

GTIDをオンラインで無効にする

この方法は、GTID をオンラインで有効にする逆の操作に似ています。以下では、詳細な説明はせずに、手順と特定のコマンドのみを説明します。

  1. まず、GTIDモードのレプリケーションをPOSベースのレプリケーションに変更します
  2. GTID_MODEをON_PERMISSIVEに設定する
  3. GTID_MODEをOFF_PERMISSIVEに設定する
  4. GTID_OWNED ステータス変数が null になり、replication_applier_status_by_worker テーブル内のすべてのトランザクションが匿名トランザクションに変換されることを確認します。
  5. FLUSH LOGSのトリガー
  6. GTID_MODEをOFFに設定する
  7. ENFORCE_GTID_CONSISTENCYをOFFに設定する
  8. my.cnf 設定ファイル内の GTID 関連パラメータを OFF に変更します。

1. レプリケーションをPOSポイントベースに変更する

奴隷を停止します。
スレーブステータスを表示\G

## show slave status\G から Master_Log_File と Exec_Master_Log_Pos を取得し、CHANGE MASTER TO に入力します。
  マスター_自動位置 = 0、
  MASTER_LOG_FILE='mysql-bin.000017',
  マスターログPOS = 224126137;
スレーブを起動します。
スレーブステータスを表示\G

2. GTID_MODEをON_PERMISSIVEに設定する

## この操作はマスター データベースとスレーブ データベースの両方で実行されます SET @@GLOBAL.GTID_MODE = ON_PERMISSIVE;

3. GTID_MODEをOFF_PERMISSIVEに設定する

## この操作は、マスター データベースとスレーブ データベースの両方で実行されます。 SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;

4. (重要なポイント) GTIDトランザクションの再生が完了していることを確認する

GTID_OWNED ステータス変数が null になり、replication_applier_status_by_worker テーブル内のすべてのトランザクションが匿名トランザクションに変換されることを確認します。

## この操作はスレーブ データベースで実行できます SELECT @@GLOBAL.GTID_OWNED;
performance_schema.replication_applier_status_by_worker から * を選択します。

5. FLUSH LOGSのトリガー

## この操作はメイン データベース FLUSH LOGS で実行できます。

6. GTID_MODEをOFFに設定する

## この操作はマスター データベースとスレーブ データベースの両方で実行されます。 SET @@GLOBAL.GTID_MODE = OFF;

7. ENFORCE_GTID_CONSISTENCYをOFFに設定する

## この操作は、マスター データベースとスレーブ データベースの両方で実行されます。 SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = OFF;

8. my.cnf設定ファイル内のGTID関連パラメータをOFFに変更します。

## この操作はマスターデータベースとスレーブデータベースの両方で実行されます。gtid-mode = OFF
強制GTID一貫性 = 1

コマンドの簡略化

1. GTIDをオンラインで有効にする

コマンドがマスターデータベースで実行されるかスレーブデータベースで実行されるかを判断する

@@GLOBAL.ENFORCE_GTID_CONSISTENCY を WARN に設定します。
@@GLOBAL.ENFORCE_GTID_CONSISTENCY を ON に設定します。
@@GLOBAL.GTID_MODE を OFF_PERMISSIVE に設定します。
@@GLOBAL.GTID_MODE を ON_PERMISSIVE に設定します。
'ONGOING_ANONYMOUS_TRANSACTION_COUNT' のようなステータスを表示します。
performance_schema.replication_applier_status_by_worker から * を選択します。
ログをフラッシュします。
@@GLOBAL.GTID_MODE を ON に設定します。

## 設定ファイルの変更 gtid-mode = ON
強制GTID一貫性 = 1

## レプリケーションモードをPOSベースからGTIDベースに変更する
奴隷を止めろ。
MASTERをMASTER_AUTO_POSITION = 1に変更します。
スレーブを起動します。
スレーブステータスを表示\G

2. GTIDをオンラインで無効にする

コマンドがマスターデータベースで実行されるかスレーブデータベースで実行されるかを判断する

奴隷を停止します。
スレーブステータスを表示\G

## show slave status\G から Master_Log_File と Exec_Master_Log_Pos を取得し、CHANGE MASTER TO に入力します。
  マスター_自動位置 = 0、
  MASTER_LOG_FILE='mysql-bin.000017',
  マスターログPOS = 224126137;
スレーブを起動します。
スレーブステータスを表示\G

@@GLOBAL.GTID_MODE を ON_PERMISSIVE に設定します。
@@GLOBAL.GTID_MODE を OFF_PERMISSIVE に設定します。
@@GLOBAL.GTID_OWNED を選択します。
performance_schema.replication_applier_status_by_worker から * を選択します。
ログをフラッシュします。
@@GLOBAL.GTID_MODE を OFF に設定します。
@@GLOBAL.ENFORCE_GTID_CONSISTENCY を OFF に設定します。

## my.cnf 設定ファイルの GTID 関連パラメータを OFF に変更します
gtidモード = オフ
強制GTID一貫性 = 1

参考リンク

レプリケーションモードの変更

レプリケーションモードの変更

レプリケーションモードの変更

上記は、MySQL オンラインで GTID モードを有効または無効にする方法について編集者が紹介したものです。皆様のお役に立てれば幸いです。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。

以下もご興味があるかもしれません:
  • MySQL GTID の総合概要
  • MYSQL データベース GTID はマスタースレーブレプリケーションを実現します (超便利)
  • MySQL 5.7 で業務を停止せずに従来のレプリケーションを GTID レプリケーションに変更する例

<<:  Vue + Axios リクエストインターフェース方式とパラメータ渡し方式の詳しい説明

>>:  HTML フォーマットの json のサンプルコード

推薦する

動的テーブルを実装するための要素サンプルコード

目次【コード背景】 【コード実装】 #1# -> コード再利用の基本は、再利用可能なコンポーネ...

TypeScript の Enum が問題となる理由

目次どうしたの?いつ使うか列挙の数を制御するビット値コントロールインデックス非数値列挙結論はType...

Nginx 運用保守ドメイン名検証方法例

インターフェイス ドメイン名を構成する際、各パブリック プラットフォームはドメイン名に対する開発者の...

1 行のコードでさまざまな IE 互換性の問題を解決します (IE6-IE10)

x-ua-compatible は、IE ブラウザがページを解析およびコンパイルするためのモデルを...

ウェブサイトでページコンテンツや情報を直接コピーできない問題を解決する方法

最近では、多くのウェブサイトでは、ページ上の特定のコンテンツや情報を直接コピーすることは許可されてお...

CSS で中空マスク レイヤーを実装するサンプル コード

この記事の内容: ページ中空マスクレイヤー、ページ中空マスクガイドレイヤー、画像中空マスク通常のマス...

Vue バックエンド管理システムのページング機能の実装例

この記事では、主に Vue バックグラウンド管理システムのページング機能の実装を紹介し、次のように共...

W3C組織はHTML4のスタイルに関する推奨事項を提供しています

これは、W3C 組織が HTML4 に対して提示したスタイル推奨事項です。残念ながら、ブラウザが独自...

mysql 行列変換サンプルコード

1. 需要3 つのテーブルがあります。一定期間にわたるさまざまな抗生物質感受性の結果、つまり rep...

不規則な絵の滝の流れ原理の分析と応用

プロジェクトで発生した不規則な絵画壁のレイアウト問題は、次のように分析されます。 1.img dis...

HTML テーブル マークアップ チュートリアル (42): テーブル ヘッダーの水平方向の配置属性 ALIGN

水平方向では、テーブル ヘッダーの配置を左、中央、右に設定できます。基本的な構文<TH ALI...

HTML/CSS におけるフロートの使用例の詳細

1. floatの基本的な使用例1. まず 2 つの div ボックスを作成し、高さ、幅、背景色を設...

Js における new 演算子の役割の詳細な説明

序文Js は現在最も一般的に使用されているコード操作言語であり、その中でも new 演算子は特によく...

HTML と CSS の命名規則の概要

CSS命名規則 ヘッダー: ヘッダーコンテンツ: コンテンツ/含むフッターナビゲーション: navサ...

MySQL デッドロックのトラブルシューティング プロセスの完全な記録

序文これまで遭遇したデータベースのデッドロックはすべて、バッチ更新中のロック順序の不一致が原因でした...