MySQLカスケードレプリケーションの実装方法の例

MySQLカスケードレプリケーションの実装方法の例

いわゆるカスケード レプリケーションでは、マスター サーバーが 1 つのスレーブ サーバーにのみデータを同期し、その後スレーブ サーバーがバックエンドのすべてのスレーブ サーバーにデータを同期することで、マスター サーバーの書き込み負荷と複製されたデータのネットワーク IO が軽減されます。

1. マスターサーバーを構成する

1. メイン設定ファイルを変更する

vim /etc/my.cnf

[mysql]設定ブロックの下に次の2行の設定を追加します。

[mysql]
log_bin # バイナリログを有効にする server_id=1 # 現在のノードにグローバルに一意のIDを設定する

2. 設定を有効にするためにMySQLサービスを再起動します。

systemctl 再起動 mairadb

3. コピー権限を持つユーザーアカウントを作成する

'replpass' によって識別される 'repluser'@'HOST' に *.* 上のレプリケーション スレーブを許可します。 

コマンド分析:

  • 'repluser'@'HOST': ユーザー名を設定します。これはホスト IP またはネットワーク セグメントです。ネットワーク セグメントは % で表されます (例: 10.0.0.%)。
  • 識別者: パスワードを設定
  • *.* : すべてのデータベースとすべてのテーブルを示します
  • GRANT REPLCATION SLAVE: ユーザーにデータの複製を許可する

このコマンドの目的は、repluserがデータベースのすべての内容をコピーすることを許可することです。

2. リレースレーブサーバーの構成

1. メイン設定ファイルを変更する

vim /etc/my.cnf

[mysql]設定ブロックに次の2行の設定を追加します。

[mysqld]  
 ログビン
server_id=2 #現在のノードにグローバルに一意の ID 番号を設定します。read_only=ON #スレーブ サーバーを読み取り専用に制限します。「注意: この制限は SUPER 権限を持つユーザーには無効です」
log_slave_updates #この項目の目的は、マスターサーバーのバイナリログをローカルマシンに記録し、そのバイナリログをバックエンドの他のスレーブサーバーにコピーすることです。

2. 設定を有効にするためにMySQLサービスを再起動します。

systemctl で mariadb を再起動します。

3. レプリケーション権限を持つユーザーアカウントを使用してプライマリサーバーに接続し、レプリケーションスレッドを開始します。

   マスターを変更 
   MASTER_HOST='host', #マスターホストのIPアドレスを指定
   MASTER_USER='repluser'、#マスターの承認済みユーザー名を指定します。MASTER_PASSWORD='replpass'、#承認済みユーザーのパスワードを指定します。MASTER_LOG_FILE='mysql-bin.xxxxx'、#マスター サーバーのコピー元となるバイナリ ログを指定します。MASTER_LOG_POS=#; #バイナリ ログの位置。マスター サーバーでこのコマンドを実行して表示できます。show master logs;

   レプリケーションスレッドIO_THREADとSQL_THREADを開始します。
   スレーブを起動します。 

4. リレースレーブサーバの状態を確認する

  MariaDB [(なし)]> スレーブを起動します。
  クエリは正常、影響を受けた行は 0 行 (0.00 秒)

  MariaDB [(なし)]> スレーブステータスを表示\G
  ************************** 1. 行 ****************************
          Slave_IO_State: マスターがイベントを送信するのを待機中
           マスターホスト: 192.168.68.7
           マスターユーザー: repluser
           マスターポート: 3306
          接続再試行: 60
         マスターログファイル: mariadb-bin.000001
       読み取りマスターログ位置: 557
          リレーログファイル: mariadb-relay-bin.000002
          リレーログ位置: 843
      リレーマスターログファイル: mariadb-bin.000001
         Slave_IO_Running: はい「NO の場合はスレッドが起動していないことを意味するので特に注意してください」
        Slave_SQL_Running: はい「NO の場合は特に注意してください。スレッドが起動していないことを意味します」
         レプリケート_Do_DB: 
       レプリケート_無視_DB: 
        テーブルの複製: 
      無視テーブルを複製: 
     Replicate_Wild_Do_Table: 
   Replicate_Wild_Ignore_Table: 
            最終エラー番号: 0
            最終エラー: 
           スキップカウンタ: 0
       実行マスターログポジション: 557
         リレーログスペース: 1139
         Until_Condition: なし
          ログファイルまで: 
          ログ位置まで: 0
        マスターSSL許可: いいえ
        マスターSSLCAファイル: 
        マスターSSLCAパス: 
         マスターSSL証明書: 
        マスターSSL暗号: 
          マスターSSLキー: 
      Seconds_Behind_Master: 0 「この項目は同期時間を示します。0 は即時同期を意味します。」
  Master_SSL_Verify_Server_Cert: いいえ
          最終IOエラー番号: 0
          最後のIOエラー: 
          最終SQLエラー番号: 0
          最後のSQLエラー: 
   Replicate_Ignore_Server_Ids: 
         マスターサーバーID: 1

3. バックエンドスレーブ構成

1. 設定ファイルを変更する

vim /etc/my.cnf

[mysql]設定ブロックに次の2行の設定を追加します。

[mysqld]  
server_id=3 #現在のノードにグローバルに一意のID番号を設定します。read_only=ON #スレーブサーバーを読み取り専用に制限します。「注意: この制限は、SUPER権限を持つユーザーには無効です」

2. 設定を有効にするためにMySQLサービスを再起動します。

systemctl で mariadb を再起動します。

3. レプリケーション権限を持つユーザーアカウントを使用してプライマリサーバーに接続し、レプリケーションスレッドを開始します。

マスターを変更 
   MASTER_HOST='リレーホスト', #リレースレーブホストのIPを指定
   MASTER_USER='repluser'、#マスターの承認済みユーザー名を指定します。MASTER_PASSWORD='replpass'、#承認済みユーザーのパスワードを指定します。MASTER_LOG_FILE='mysql-bin.xxxxx'、#リレースレーブサーバーがコピーを開始するバイナリログを指定します。MASTER_LOG_POS=#; #バイナリログの位置。スレーブサーバーでこのコマンドを実行して表示できます。show master logs;

   レプリケーションスレッドIO_THREADとSQL_THREADを開始します。
   スレーブを起動します。 

4. スレーブサーバーのステータスを確認する

  MariaDB [(なし)]> スレーブを起動します。
  クエリは正常、影響を受けた行は 0 行 (0.00 秒)

  MariaDB [(なし)]> スレーブステータスを表示\G
  ************************** 1. 行 ****************************
          Slave_IO_State: マスターがイベントを送信するのを待機中
           マスターホスト: 192.168.68.17
           マスターユーザー: repluser
           マスターポート: 3306
          接続再試行: 60
         マスターログファイル: mariadb-bin.000001
       読み取りマスターログ位置: 557
          リレーログファイル: mariadb-relay-bin.000002
          リレーログ位置: 843
      リレーマスターログファイル: mariadb-bin.000001
         Slave_IO_Running: はい「NO の場合はスレッドが起動していないことを意味するので特に注意してください」
        Slave_SQL_Running: はい「NO の場合は特に注意してください。スレッドが起動していないことを意味します」
         レプリケート_Do_DB: 
       レプリケート_無視_DB: 
        テーブルの複製: 
      無視テーブルを複製: 
     Replicate_Wild_Do_Table: 
   Replicate_Wild_Ignore_Table: 
            最終エラー番号: 0
            最終エラー: 
           スキップカウンタ: 0
       実行マスターログポジション: 557
         リレーログスペース: 1139
         Until_Condition: なし
          ログファイルまで: 
          ログ位置まで: 0
        マスターSSL許可: いいえ
        マスターSSLCAファイル: 
        マスターSSLCAパス: 
         マスターSSL証明書: 
        マスターSSL暗号: 
          マスターSSLキー: 
      Seconds_Behind_Master: 0 「この項目は同期時間を示します。0 は即時同期を意味します。」
  Master_SSL_Verify_Server_Cert: いいえ
          最終IOエラー番号: 0
          最後のIOエラー: 
          最終SQLエラー番号: 0
          最後のSQLエラー: 
   Replicate_Ignore_Server_Ids: 
         マスターサーバーID: 1

5.最後に、マスターサーバーでデータベーステストを作成し、同期されているかどうかを確認します。

カスケードレプリケーション機能

  • マスターサーバーとネットワークIOの負荷を軽減
  • ただし、データの不整合が発生する可能性があります。

要約する

  • リレースレーブはバイナリログを開く必要があり、log_slave_updates設定項目を追加する必要があります。
  • スレーブ サーバーを読み取り専用に制限する read_only=ON の効果に注意してください。「注意: この制限は、SUPER 権限を持つユーザーには無効です。」

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MYSQL フルバックアップ、マスタースレーブレプリケーション、カスケードレプリケーション、および半同期の概要
  • あるテーブルのデータの列を別のテーブルの列にコピーするMySQLメソッド
  • MySQL の異なるテーブル間でフィールドをコピーする
  • MySQL マスタースレーブレプリケーションスレッドの状態遷移に関する詳細な理解
  • Mysql マスタースレーブレプリケーションの注意事項の説明
  • MySQL レプリケーション メカニズムの原理の説明

<<:  Centos8 に nginx をインストールするための詳細なチュートリアル (画像とテキスト)

>>:  Vue でインスタント通信を実現するために MQTT サーバーを使用する手順を記録します。

推薦する

MySQLリモート接続失敗の解決策

以前、MySQLがローカルでは接続できるのにリモートでは接続できないという問題に遭遇したことがありま...

CSSを使用してHTMLテキストボックス内のテキストの垂直方向の中央を制御する

Text の height 属性が定義されている場合、Text に入力されたテキストは垂直方向に中央...

JVMシリーズのメモリモデルの詳細な説明

目次1. メモリモデルとランタイムデータ領域2. マインドマップと凡例3. オブジェクトはJVMから...

CSS3は、欠けた角の長方形、折り畳まれた角の長方形、欠けた角の境界線を実装しています。

序文数日前、偶然、コーナーの四角形が欠落している機能に遭遇しました。最初に頭に浮かんだのは、必要な場...

LinuxカーネルとSVNバージョン間の競合の解決策

現象システムは Linux システムカーネルを正常にコンパイルできましたが、SVN をインストールし...

Vueのレスポンシブシステムの原理の詳細な説明

目次Vueのレスポンシブシステムの基本原則1. Object.definePropertyの使い方を...

HTML の rel 属性の分析

.y { background: url(//img.jbzj.com/images/o_y.pn...

Docker に Kong ゲートウェイをインストールする方法の例

1. Dockerネットワークを作成する docker ネットワーク作成 kong-net 2. デ...

Docker イメージ管理の一般的な操作コード例

ミラーリングも Docker のコアコンポーネントの 1 つです。ミラーリングはコンテナ操作の基盤で...

MySQL における INSERT INTO SET の利点

MySQL データベースにデータを挿入します。以前はよく使われていた INSERT INTO テーブ...

VMware 仮想マシンに Android x86 をインストールする方法

アプリをテストしたいが、それを携帯電話で実行したくない場合があります。この場合、仮想マシンを使用して...

React Nativeの起動プロセスの詳細分析

はじめに: この記事ではreact-native-cliで作成したサンプル プロジェクト (Andr...

Tomcatの全体構造の簡単な紹介

Tomcat は Web コンテナとして広く知られています。Java を学び始めたときから現在の仕事...

ElementUIはカスケードセレクタを実装します

この記事の例では、カスケードセレクターを実装するためのelementUIの具体的なコードを参考までに...