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 学習ノート: 型の絞り込み

推薦する

CSS3はウェブサイトの製品表示効果図を実現します

この記事では、CSS3 を使用した Web サイトの商品表示の効果を紹介し、皆さんと共有します。詳細...

デザインにおけるユーザーエクスペリエンスの背後にある8つのユーザー本能について話す

編集者注: この記事は、Teambition チームの @娄昊川 が寄稿したものです。Teambit...

Linux CentOS 6.5 のアンインストール、tar、および MySQL のインストールチュートリアル

システム提供のMySQLをアンインストールする1. MySQLがシステムにインストールされているかど...

Dockerイメージをパッケージ化し、リモートサーバーにプッシュしてk8sにデプロイする方法

目次1. Dockerファイル2. pom 構成3. イメージプッシュ4. k8s デプロイメント前...

ウェブページのカスタム選択ボックス選択

選択ドロップダウン リスト フォームは誰もがよく知っているかもしれませんが、デフォルトのドロップダウ...

VUEをベースにしたシンプルな学生情報管理システムの実装

目次1. 主な機能2. 実装のアイデア3. コードの実装4. エフェクト表示V. 結論1. 主な機能...

Linux でリモート MySQL データベースを手動で展開する方法の詳細な説明

1. mysql をインストールします。次のコマンドを実行して、YUM ソースを更新します。 rpm...

Linux サーバーの状態を監視する方法

私たち、特に Linux エンジニアは毎日 Linux サーバーを扱っています。サーバーのセキュリテ...

CentOS 7.5 が Varnish キャッシュサーバー機能を導入

1. ワニスの紹介Varnish は、高性能なオープンソースのリバースプロキシサーバーおよび HTT...

MAC での MYSQL5.7.17 接続失敗の問題と解決策

MYSQL5.7.17 が MAC で接続できない問題。SQLBench_community 6.3...

PHP+nginx サービス 500 502 エラーのトラブルシューティングのアイデアの詳細な説明

概要オンラインサービスへのアクセス中に 500 または 502 エラーが発生した場合、緊急処理とトラ...

WeChatアプレットのスクロールビューが左右にスライドできない問題を解決する方法

私は現在、自分自身の小さなプログラム プロジェクトに取り組んでいます。プロフェッショナルなフロントエ...

jQueryはマウスドラッグ画像機能を実装します

この例では、jQuery を使用してマウス ドラッグ イメージ機能を実装します。まず、ラッパーを設定...

HTML テーブル マークアップ チュートリアル (39): ヘッダーの明るい境界線の色属性 BORDERCOLORLIGHT

テーブル ヘッダーでは、明るい境界線の色を個別に定義できます。基本的な構文<TH ボーダーカラ...

DockerでVueプロジェクトをデプロイする方法を教えます

1.前面に書きます:軽量仮想化テクノロジーとして、Docker には継続的インテグレーション、バージ...