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 サーバーを使用する手順を記録します。

推薦する

Vue + OpenLayers クイックスタートチュートリアル

Openlayers は、WebGIS クライアント向けのモジュール式で高性能かつ機能豊富な Jav...

nginx「504 ゲートウェイタイムアウト」エラーを解決する

ウェブサイトを作成する学生は、アクセス時に一部の nginx サーバーが 504 Gateway T...

jQueryはアコーディオンの小さなケースを実装します

この記事では、アコーディオンを実装するためのjQueryの具体的なコードを参考までに紹介します。具体...

どのような種類の MYSQL 接続クエリを知っていますか?

序文クエリ情報が複数のテーブルから取得される場合、クエリのためにこれらのテーブルを結合する必要があり...

MySQLスレーブのメンテナンスに関する経験の共有

序文: MySQL マスター/スレーブ アーキテクチャは、最も一般的に使用されるアーキテクチャ セッ...

VMware 上の CentOS に Oracle12.2 をサイレント インストールする詳細なグラフィック チュートリアル

環境準備: VMware+CentOS、jdk 1. システムディスクのサイズを確認する1. コマン...

CSS で順序付きリスト項目と順序なしリスト項目のスタイルを設定する方法

順序なしリストでは、順序なしリストのシンボルは各リストの前に表示されるドットです。順序付きリスト o...

Windows サービス 2016 Datacenter\Stand\Embedded アクティベーション方法 (2021)

管理者権限でcmdを実行する slmgr /ipk CB7KF-BWN84-R7R2Y-793K2-...

MySQL 5.7.16 のインストールと設定方法のグラフィック チュートリアル (Ubuntu 16.04)

Ubuntu 16.04 に MySQL 5.7 をインストールするにはどうすればいいですか?メイ...

WeChatアプレットシングルページアプリケーションルーティングを徹底的に理解するための10分

シングルページアプリケーションの特徴「前提:」Web ページには、クリックするとサイト内の他のページ...

IDEA で Docker プロジェクトをデプロイする手順

現在、ほとんどのプロジェクトが Docker 上にデプロイされ始めていますが、デプロイのプロセスはま...

MySQL 8.0 のユーザーとロールの管理原則と使用方法の詳細

この記事では、MySQL 8.0 のユーザーとロールの管理について例を挙げて説明します。ご参考までに...

JavaScript フレームワーク デザイン パターンの詳細な説明

目次動画最優秀選手ムヴヴムVueのソーススパ mpa要素を作成するクラス要約する動画 Model(模...

HTMLプログラミングタグとドキュメント構造の詳細な説明

HTML を使用してコンテンツをマークアップする目的は、Web ページにセマンティクスを与えることで...

CSS スクロールバースタイル変更コード

CSS スクロールバースタイル変更コード .scroll::-webkit-scrollbar { ...