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 で大規模なデータ テーブルのコピーの効率を向上させることに関する関...

ElementuiはデータをxlsxとExcelテーブルにエクスポートします

最近、Vue プロジェクトについて知り、ElementUI でデータを xlsx および Excel...

Tomcat の設定と Eclipse での起動方法

目次Tomcat8のインストールと設定方法tomcat ダウンロードTomcat マネージャーを有効...

Nginx 急ぎ購入 電流制限構成 実装分析

ビジネス上のニーズにより、急ぎの購入が発生することが多いため、ロード バランシング フロント エンド...

MySQLとOracleの違いのまとめ(機能性能の比較、選択、使用時のSQLなど)

1. 同時実行性同時実行性は OLTP データベースの最も重要な機能ですが、同時実行性にはリソース...

Linux で文字化けしたファイルや特殊文字のファイルを削除する方法

エンコーディングの理由により、Linux サーバーに中国語のファイルやディレクトリをアップロードまた...

MySQL の自己結合重複排除に関する注意事項

機能シナリオを簡単に説明しましょう。データ行フィールドは次のとおりです。名前開始日時タイプこの表では...

MySQL リンクを表示し、異常なリンクを削除する方法

序文:データベースの運用や保守の際には、リンクの総数がいくつあるか、アクティブなリンクがいくつあるか...

Vueを使い始める際に習得する必要がある知識について簡単に説明します

最も人気のあるフロントエンド フレームワークの 1 つとして、Vue は多くのフロントエンド開発エン...

Linux での MySQL 8.0.25 のインストールと設定のチュートリアル

LinuxにMySQL 8.0.25をインストールするための最新のチュートリアルを参考にしてください...

コーディングスキルを向上させるためのJavaScriptのヒント

目次1. 一意の値をフィルタリングする2. 短絡評価2.1 シナリオ例3. ブール変換4. 文字列を...

SQL IDENTITY_INSERT ケーススタディ

一般的に、データ テーブル内の列を ID 列として設定すると、ID 列の表示値を手動で ID 列に挿...

bitronix を使用して MySQL に接続するときの MySQLSyntaxErrorException の解決方法

bitronix を使用して MySQL に接続するときの MySQLSyntaxErrorExce...

mysqlにコメント情報を追加する実装

序文最近、MySQL に関するメモをいくつか尋ねる人がいたので、ブログ記事を書かなければなりません。...

最新の超詳細な VMware 仮想マシンのダウンロードとインストールのグラフィック チュートリアル

目次1. 仮想マシンをダウンロードする2. 仮想マシンのインストールVMware のダウンロードとイ...