MySQL のマスター スレーブ レプリケーション オプションをオンラインで変更する方法

MySQL のマスター スレーブ レプリケーション オプションをオンラインで変更する方法

序文:

MySQL で最も一般的に使用されるアーキテクチャは、マスター スレーブ レプリケーションです。実際、マスター スレーブ レプリケーションには、特にスレーブ側で多くのオプションがあります。テーブルやデータベースを無視するなどのレプリケーション フィルターを設定できます。これらのフィルター オプションは、再起動せずにオンラインで変更できます。以前はこれについてあまり知りませんでしたが、最近関連情報を読み、個人的にこの機能は非常に便利だと思いました。この記事ではその内容を皆さんと共有します。

1. コピーフィルタパラメータの概要

まず、レプリケーション フィルターを設定するためのさまざまなパラメーターを理解する必要があります。レプリケーション フィルタリングはスレーブ データベース側で設定されます。特定のデータベースまたはテーブルのみをコピーしたり、特定のデータベースまたはテーブルのコピーを無視したりできます。これらはすべて、異なるパラメータによって制御されます。以下では、さまざまなパラメータの機能について簡単に紹介します。

  • REPLICATE_DO_DB: 特定のデータベースのデータのみを同期することを指定します
  • REPLICATE_IGNORE_DB: データベースの同期を無視する
  • REPLICATE_DO_TABLE: テーブルを同期することを指定します
  • REPLICATE_IGNORE_TABLE: テーブルの同期を無視する
  • REPLICATE_WILD_DO_TABLE: 特定のテーブルを同期することを指定します。ワイルドカードを使用できます。
  • REPLICATE_WILD_IGNORE_TABLE: 特定のテーブルの同期を無視します。ワイルドカードを使用できます。
  • REPLICATE_REWRITE_DB: データベース側からデータベース名を置き換えます

これらのレプリケーション フィルター パラメーターは理解しやすいです。名前を見るだけで、パラメーターの機能を大まかに理解できます。デフォルトでは、これらのパラメータは設定されていません。マスター スレーブ レプリケーションを有効にすると、スレーブ データベースはデフォルトでマスター データベースから送信されたすべてのデータを同期します。

2. コピーフィルターのオプションを変更する

スレーブ ライブラリのレプリケーション戦略を一時的に調整する場合は、上記のパラメータを設定できます。フィルタリング パラメータを構成ファイルに書き込んでからスレーブ ライブラリを再起動して適用することもできますが、この方法ではインスタンスを再起動する必要があるため、推奨されません。 MySQL バージョン 5.7 では、レプリケーション フィルタリングをオンラインで設定できます。ただし、レプリケーションを停止する必要はありますが、インスタンスを再起動する必要がないため、一時的な調整には便利です。 CHANGE REPLICATION FILTER ステートメントが主に使用されます。簡単なテストをしてみましょう。

# レプリケーションフィルタリングはデフォルトでは設定されていませんmysql> show slave status\G
************************** 1. 行 ****************************
        Slave_IO_State: マスターがイベントを送信するのを待機中
         マスターホスト: 10.0.3.16
         マスターユーザー: repl
         マスターポート: 3306
        接続再試行: 60
       マスターログファイル: binlog.000004
     読み取りマスターログ位置: 35198
        リレーログファイル: リレーbin.000002
        リレーログ位置: 910
    リレーマスターログファイル: binlog.000004
       スレーブIO実行中: はい
      スレーブSQL実行中: はい
       レプリケート_Do_DB: 
     レプリケート_無視_DB: 
      テーブルの複製: 
    無視テーブルを複製: 
   Replicate_Wild_Do_Table: 
 Replicate_Wild_Ignore_Table: 
          最終エラー番号: 0
          最終エラー: 
         スキップカウンタ: 0
     実行マスターログ位置: 35198
     
 # db1 ライブラリのレプリケーションを無視するように設定します。mysql> STOP SLAVE SQL_THREAD;
クエリは正常、影響を受けた行は 0 行 (0.00 秒)
mysql> レプリケーション フィルターを変更します。REPLICATE_IGNORE_DB = (db1);
クエリは正常、影響を受けた行は 0 行 (0.00 秒)
mysql> スレーブ SQL_THREAD を開始します。
クエリは正常、影響を受けた行は 0 行 (0.01 秒)
mysql>スレーブステータスを表示\G
************************** 1. 行 ****************************
        Slave_IO_State: マスターがイベントを送信するのを待機中
         マスターホスト: 10.0.3.16
         マスターユーザー: repl
         マスターポート: 3306
        接続再試行: 60
       マスターログファイル: binlog.000004
     読み取りマスターログ位置: 35198
        リレーログファイル: リレーbin.000002
        リレーログ位置: 910
    リレーマスターログファイル: binlog.000004
       スレーブIO実行中: はい
      スレーブSQL実行中: はい
       レプリケート_Do_DB: 
     レプリケート_無視_DB: db1
      テーブルの複製: 
    無視テーブルを複製: 
   Replicate_Wild_Do_Table: 
 Replicate_Wild_Ignore_Table: 
          最終エラー番号: 0
          最終エラー: 
         スキップカウンタ: 0
     実行マスターログ位置: 35198
 
# マスター データベースに db1 を作成して、スレーブ データベースが同期されているかどうかをテストします。mysql> CREATE DATABASE `db1` DEFAULT CHARACTER SET utf8;
クエリは正常、1 行が影響を受けました (0.01 秒)
mysql> データベースを表示します。
+--------------------+
| データベース |
+--------------------+
| 情報スキーマ |
|db1|
|mysql |
| パフォーマンススキーマ |
|システム|
|テストデータベース|
+--------------------+
セット内の 6 行 (0.00 秒)
# スレーブ データベースのステータスを表示します。mysql> show databases;
+--------------------+
| データベース |
+--------------------+
| 情報スキーマ |
|mysql |
| パフォーマンススキーマ |
|システム|
|テストデータベース|
+--------------------+
セット内の行数は 5 です (0.00 秒)
mysql>スレーブステータスを表示\G
************************** 1. 行 ****************************
        Slave_IO_State: マスターがイベントを送信するのを待機中
         マスターホスト: 10.0.3.16
         マスターユーザー: repl
         マスターポート: 33061
        接続再試行: 60
       マスターログファイル: binlog.000004
     読み取りマスターログ位置: 35383
        リレーログファイル: リレーbin.000002
        リレーログ位置: 1095
    リレーマスターログファイル: binlog.000004
       スレーブIO実行中: はい
      スレーブSQL実行中: はい
       レプリケート_Do_DB: 
     レプリケート_無視_DB: db1
      テーブルの複製: 
    無視テーブルを複製: 
   Replicate_Wild_Do_Table: 
 Replicate_Wild_Ignore_Table: 
          最終エラー番号: 0
          最終エラー: 
         スキップカウンタ: 0
     実行マスターログ位置: 35383
     
# レプリケーション フィルター パラメーターをキャンセルします。mysql> STOP SLAVE SQL_THREAD;
クエリは正常、影響を受けた行は 0 行 (0.01 秒)
mysql> レプリケーション フィルターの変更 REPLICATE_IGNORE_DB = ();
クエリは正常、影響を受けた行は 0 行 (0.00 秒)
mysql> スレーブ SQL_THREAD を開始します。
クエリは正常、影響を受けた行は 0 行 (0.01 秒)
mysql>スレーブステータスを表示\G
************************** 1. 行 ****************************
        Slave_IO_State: マスターがイベントを送信するのを待機中
         マスターホスト: 10.0.3.16
         マスターユーザー: repl
         マスターポート: 3306
        接続再試行: 60
       マスターログファイル: binlog.000004
     読み取りマスターログ位置: 35383
        リレーログファイル: リレーbin.000002
        リレーログ位置: 1095
    リレーマスターログファイル: binlog.000004
       スレーブIO実行中: はい
      スレーブSQL実行中: はい
       レプリケート_Do_DB: 
     レプリケート_無視_DB: 
      テーブルの複製: 
    無視テーブルを複製: 
   Replicate_Wild_Do_Table: 
 Replicate_Wild_Ignore_Table: 
          最終エラー番号: 0
          最終エラー: 
         スキップカウンタ: 0
     実行マスターログ位置: 35383

CHANGE REPLICATION FILTER ステートメントを使用して、レプリケーション フィルター オプションをオンラインで変更する方法を簡単に説明しました。リストされているすべてのフィルター パラメーターはこのステートメントを使用して変更できますが、一部のオプションは相互に排他的であることに注意してください。実際のニーズに応じて適切なパラメータを設定する必要があります。以下は公式ドキュメントのサンプル構文です。

レプリケーション フィルターの変更 filter[, filter][, ...]
フィルター:
  REPLICATE_DO_DB = (db_list)
 | REPLICATE_IGNORE_DB = (db_list)
 | REPLICATE_DO_TABLE = (tbl_list)
 | REPLICATE_IGNORE_TABLE = (テーブルリスト)
 | REPLICATE_WILD_DO_TABLE = (ワイルドテーブルリスト)
 | REPLICATE_WILD_IGNORE_TABLE = (ワイルドテーブルリスト)
 | REPLICATE_REWRITE_DB = (db_pair_list)
db_リスト:
  db_name[, db_name][, ...]
テーブルリスト:
  db_name.table_name[, db_table_name][, ...]
ワイルドテーブルリスト:
  'db_pattern.table_pattern'[, 'db_pattern.table_pattern'][, ...]
db_ペアリスト:
  (db_pair)[, (db_pair)][, ...]
db_ペア:
  から_db、へ_db

要約:

この記事では、レプリケーション フィルター オプションをオンラインで変更する方法を紹介します。フィルター パラメーターによって用途が異なります。フィルター パラメーターを実際に設定する必要がある場合は、包括的なテストを実施することをお勧めします。一部のパラメーター設定は、他のデータベース テーブルのレプリケーションに影響を与える可能性があります。永続的に有効にしたい場合は、オンラインで変更してから構成ファイルに追加して、スレーブ ライブラリを再起動した後も有効になるようにすることができます。

上記は、MySQL のマスタースレーブレプリケーションオプションをオンラインで変更する方法の詳細です。MySQL のマスタースレーブレプリケーションの変更の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQL 5.7 Docker のマスタースレーブレプリケーションアーキテクチャの構築に関するチュートリアル
  • MySQL マスタースレーブレプリケーションのいくつかのレプリケーション方法の概要
  • MySQL マスタースレーブレプリケーションの詳細な分析
  • MySQL マスタースレーブレプリケーションの原理と実践の詳細な説明
  • Windows で MySQL マスター スレーブ レプリケーションを構成する方法
  • Docker ベースの MySQL マスタースレーブレプリケーション環境を構築するための実装手順
  • MySQL マスタースレーブレプリケーションの役割と動作原理の詳細な説明
  • MySQLデータベースのマスタースレーブレプリケーションの長い遅延に対する解決策
  • MySQL 4 の一般的なマスタースレーブレプリケーションアーキテクチャ

<<:  UbuntuはCUDAの複数のバージョンをインストールし、いつでも切り替えることができます

>>:  TypeScript 学習ノート: 型の絞り込み

推薦する

MySQL クエリ キャッシュとバッファ プール

1. キャッシュ - クエリキャッシュ次の図は、MySQL 公式サイトから提供されています: MyS...

JavaScript ベースのシンプルなカルーセルの実装

この記事では、シンプルなカルーセルを実装するためのJavaScriptの具体的なコードを参考までに紹...

MySQLのタイムゾーンを表示および設定する方法

1. データベースのタイムゾーンを確認する '%time_zone' のような変数を...

このような大画面のデジタルスクロール効果が必要になる場合があります

大画面のデジタル スクロール効果は、最近の作業における大画面 UI ダイアグラムから生まれました。U...

MySQLのSeconds_Behind_Masterの詳細な説明

目次マスターの後ろの秒数オリジナルの実装最終マスタータイムスタンプマスターとのクロック差他の実行時間...

Node.jsはSTMPプロトコルとEWSプロトコルに基づいてメールを送信します

目次1 STMP プロトコルに基づいてメールを送信する Node.js メソッド2 MS Excha...

Layuiテーブル行のデータを動的に編集する

目次序文スタイル機能説明初期化コードイベントリスナーの追加リスナーツールバーモニターテーブル行ツール...

CSS3 でクールなスライス画像カルーセル効果を実現

今日は、CSS を使用してクールな画像カルーセル コンポーネントを作成する方法を学びます。その原理は...

CentOS 8にJenkinsをインストールする方法

CentOS 8 に Jenkins をインストールするには、root アカウントまたは sudo ...

mybatis-plusページングパラメータが渡された後、SQLのwhere条件にはページング情報操作の制限がありません

2時間近くかけて、さまざまな方法を試しました。後で、whereでフィルタリングした後のデータ量が1ペ...

CentOS7 64 ビットでの MySQL 5.7 のインストールと設定のチュートリアル

インストール環境: CentOS7 64ビットMINI版、MySQL5.7をインストール1. YUM...

MySQL が「operate_time」エラーのデフォルト値が無効であると報告する問題を解決する

データベースでcreate tableステートメントを実行する テーブル `sys_acl` を作成...

JS 内の Json 文字列 + Cookie + ローカルストレージ

目次1.Json文字列1.1Json構文1.2 例2. クッキー2.1 使い方は? 3. ローカルス...

Linuxの相対パスと絶対パスの使用

01. 概要絶対パスと相対パスはシェル環境でよく使用され、それぞれに独自の用途があります。相対パスの...