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

推薦する

HTMLタグの説明

HTMLタグの説明1. HTMLタグタグ: !DOCTYPE説明: HTML ドキュメントが準拠する...

MySQL 5.5.56 インストール不要版の設定方法

MySQL 5.5.56無料インストール版の設定方法をテキストコードで詳しく説明します。具体的な内容...

MySQL 8.0.15 インストール グラフィック チュートリアルとデータベースの基礎

MySQLソフトウェアのインストールとデータベースの基礎は参考用です。具体的な内容は次のとおりです。...

Docker ビルド PHP 環境チュートリアル詳細説明

Dockerのインストール公式インストールスクリプトを使用して最新バージョンのDockerをインスト...

js は複数の画像を zip にパッケージ化します

目次1. ファイルをインポートする2. HTMLページ3. メインコード4. 画像をbase64に変...

HTML でのアンカータグの使用例の共有

アンカータグの使用法:同じドキュメント内の特定の場所にリンクすることをアンカー リンクと呼びます。ア...

VUE+Canvasは、インゴットを受け取る富の神のゲームを実装します

前回のキャンバス ゲーム シリーズへようこそ: 《VUEがFlappy Birdを実装しました〜〜〜...

スーパーバイザーウォッチドッグの使い方を3分で学ぶ

ソフトウェアとハ​​ードウェア環境centos7.6.1810 64ビット cat /etc/red...

Vueプロジェクトでlessを使用するためのヒント

目次序文1. スタイルの浸透1. パターン浸透とは何ですか? 2. 使い方は? 2. ミキシング1....

MySQLデータベースに中国語の文字を保存するときに発生するエラーを解決する方法を教えます

目次1. 遭遇した問題2. 問題を分析する3. 本当の問題4. 解決策5. ソリューション効果1. ...

VMware での Ubuntu 16.04 イメージの完全インストール チュートリアル

この記事では、VMware 12でのUbuntu 16.04イメージのインストールチュートリアルを参...

VirtualBox の仮想ディスク vdi ファイルの容量を拡張する方法 (グラフィック チュートリアル)

VirtualBoxのインストールディレクトリを見つけます。ディレクトリ内には容量を拡張するために...

Linux システムで crontab を使用して MySQL データベースを定期的にバックアップする方法

システムの crontab を使用して定期的にバックアップ ファイルを実行し、バックアップ結果を日付...

Linuxルートの初期値を設定する方法の簡単な分析

Ubuntu ではデフォルトで root ログインが許可されていないため、初期の root アカウン...

Vue で変数式セレクターを実装する方法

目次HTML構造の定義入力タグのバインディング属性入力タグはキーダウンイベントをリッスンしますli ...