MySQL シリーズ 13 MySQL レプリケーション

MySQL シリーズ 13 MySQL レプリケーション

1. MySQLレプリケーション関連の概念

  • マスタースレーブレプリケーション: マスターノードは複数のスレーブノードにデータを同期します
  • カスケードレプリケーション: マスターノードがスレーブノードにデータを同期し、他のスレーブノードがスレーブノードにデータを複製します。
  • 同期レプリケーション: マスター ノードからスレーブ ノードにすべてのデータが同期された後にのみデータをユーザーに返すレプリケーション戦略を、同期レプリケーションと呼びます。
  • 非同期レプリケーション: データがプライマリノードに書き込まれるとすぐに、同期を完了するためにユーザーに返されます。
  • 読み取りと書き込みの分離: フロントエンドにスケジューラを追加して、データを変更するステートメントとデータを照会するステートメントを別々にスケジュールし、マスターノードへの書き込み操作をスケジュールし、スレーブノードへの読み取り操作をスケジュールします。

マスターノード:

  • ダンプスレッド: 各スレーブI/Oスレッドのダンプスレッドを開始し、バイナリログイベントを送信します。

ノードから:

  • I/Oスレッド: マスターからバイナリログイベントを要求し、リレーログに保存します。
  • SQL スレッド: リレー ログからログ イベントを読み取り、ローカルで再生します。

コピー機能に関連するファイル:

  • master.info: スレーブがマスターに接続するときに、アカウント、パスワード、サーバー アドレスなどの関連情報を保存するために使用されます。
  • relay-log.info: 現在のスレーブノードにコピーされた現在のバイナリログとローカルリプレイログとの対応を保存します。

スキーマをコピーします:

  • 一人の主人と一人の奴隷
  • 一人の主人に多くの奴隷
  • マスター-マスターレプリケーション
  • 循環複製
  • カスケードレプリケーション
  • 複数のマスターと 1 つのスレーブ

一般的なアーキテクチャには、マスタースレーブアーキテクチャやカスケードアーキテクチャがあります。

2. シンプルな1マスター1スレーブアーキテクチャの実装

1. 新しいデータベースはマスタースレーブアーキテクチャを構築します

1) メインサーバーの構成

~]# vim /etc/my.cnf
    [mysqld]
    ログビン
    binlog_format=行
    ログベース名=master1
    サーバーID=1
~]# systemctl mariadbを再起動します
~]#mysql
MariaDB [(なし)]> GRANT REPLICATION SLAVE ON *.* TO testuser@'192.168.0.8' IDENTIFIED BY 'testpass'; #同期アカウントを承認 MariaDB [(なし)]> SHOW MASTER LOGS;
+--------------------+------------+
| ログ名 | ファイルサイズ |
+--------------------+------------+
| マスター1-bin.000001 | 26756 |
| マスター1-bin.000002 | 921736 |
| master1-bin.000003 | 401 | #この場所を記録し、サーバーから同期を開始します +--------------------+-----------+

2) サーバー設定から

~]# vim /etc/my.cnf
    [mysqld]
    server_id=2 #サーバーIDは一意です relay_log=リレーログ
    リレーログインデックス=リレーログインデックス
    読み取り専用=オン
~]# systemctl mariadbを再起動します
~]#mysql
MariaDB [(なし)]> マスターを変更する
    -> MASTER_HOST='192.168.0.7', #マスターノードのIPを指定します
    -> MASTER_USER='testuser', #同期ユーザーのユーザー名-> MASTER_PASSWORD='testpass', #パスワード-> MASTER_PORT=3306,
    -> MASTER_LOG_FILE='master1-bin.000003'、#上記に記録されたファイル-> MASTER_LOG_POS=401、#位置-> MASTER_CONNECT_RETRY=10; #再試行時間 10 秒MariaDB [(なし)]> START SLAVE; #マスター スレーブ レプリケーションを開始します

3) テスト

マスターノードでデータを生成します。
MariaDB [(なし)]> CREATE DATABASE testdb;
MariaDB [(なし)]> testdbを使用する
MariaDB [testdb]> テーブル testlog を作成します (id int auto_increment primary key、name char(30)、age int default 20);
MariaDB [testdb]> 区切り文字 $$
MariaDB [testdb]> プロシージャ pro_testlog() を作成します
    -> 開始
    -> i int を宣言します。
    -> i = 1 を設定します。
    -> i < 100000 の場合
    -> testlog(name,age) に値を挿入します (concat('testuser',i),i);
    -> i = i +1 を設定します。 
    -> 終了しながら;
    -> 終了$$
MariaDB [testdb]> 区切り文字;
MariaDB [testdb]> トランザクションを開始します。
MariaDB [testdb]> pro_testlog を呼び出します。
MariaDB [testdb]> コミット;
スレーブ ノードの同期ステータスを確認します。
MariaDB [(なし)]> SELECT COUNT(*) FROM testdb.testlog;
+----------+
| カウント(*) |
+----------+
| 99999 | #同期成功+----------+
MariaDB [(なし)]> スレーブステータスを表示\G
*************************** 1. 行 ****************************
               Slave_IO_State: マスターがイベントを送信するのを待機中
                  マスターホスト: 192.168.0.7
                  マスターユーザー: testuser
                  マスターポート: 3306
                接続再試行: 10
              マスターログファイル: master1-bin.000003
          読み取りマスターログ位置: 10389814
               リレーログファイル: リレーログ.000002
                リレーログ位置: 10389944
        リレーマスターログファイル: master1-bin.000003
             Slave_IO_Running: Yes #IO スレッドが開始されました Slave_SQL_Running: Yes #SQL スレッドが開始されました Seconds_Behind_Master: 0 #マスターとスレーブのレプリケーション間の時間差 Master_Server_Id: 1

2. 古いデータベースに新しいスレーブサーバーを追加する

1) メインサーバーの構成

~]# vim /etc/my.cnf
    [mysqld]
    ログビン
    binlog_format=行
    ログベース名=master1
    サーバーID=1
~]# systemctl mariadbを再起動します
~]# mysqldump -A -F --single-transaction --master-data=1 > full.sql
~]# scp full.sql [email protected]:/root/
~]# mysql -e 'testpass' によって識別される te​​stuser@'192.168.0.8' に *.* のレプリケーション スレーブを許可します。'

2) サーバー設定から

~]# vim /etc/my.cnf
    [mysqld]
    サーバーID=2
    relay_log=リレーログ   
    リレーログインデックス=リレーログインデックス
    読み取り専用=オン
~]# systemctl mariadbを再起動します
~]# vim full.sql #バックアップSQLファイルに次の情報を追加します。CHANGE MASTER TO
    MASTER_HOST='192.168.0.7',
    MASTER_USER='テストユーザー',
    MASTER_PASSWORD='テストパス',
    マスターポート=3306、
    MASTER_LOG_FILE='master1-bin.000005',
    マスターログPOS=245、
    MASTER_CONNECT_RETRY=10;
~]# mysql < full.sql #SQL MariaDB のインポート中に構成が完了しました [(なし)]> SELECT COUNT(*) FROM testdb.testlog;
+----------+
| カウント(*) |
+----------+
| 99999 |
+----------+
MariaDB [(なし)]> START SLAVE; #レプリケーションを開始する

3. カスケードレプリケーションアーキテクチャの実装

1) マスターノード

[root@master ~]# vim /etc/my.cnf
[mysqld]
ログビン
binlog_format=行
ログベース名=マスター
サーバーID=1
[root@master ~]# systemctl mariadbを再起動します
MariaDB [(なし)]> 'replpass' によって識別される repluser@'192.168.0.%' に *.* のレプリケーション スレーブを許可します。
MariaDB [(なし)]> SHOW MASTER LOGS;
+-------------------+----------+
| ログ名 | ファイルサイズ |
+-------------------+----------+
| マスターbin.000001 | 26753 |
| マスターbin.000002 | 921736 |
| マスターbin.000003 | 401 |
+-------------------+----------+

2) スレーブノード

[root@slave1 ~]# vim /etc/my.cnf
[mysqld]
log_bin #カスケードアーキテクチャでは、リレースレーブノードにバイナリログ機能binlog_format=ROWが必要であることに注意してください。
読み取り専用=オン
サーバーID=2
log_slave_updates #これがキーです。その機能は、サービスからのデータの変更をバイナリログファイルに記録することです。relay_log=relay-log
リレーログインデックス=リレーログインデックス
[root@slave1 ~]# systemctl mariadbを起動します
MariaDB [(なし)]> マスターを変更する
    -> MASTER_HOST='192.168.0.7',
    -> MASTER_USER='repluser',
    -> MASTER_PASSWORD='replpass',
    -> マスターポート=3306、
    -> MASTER_LOG_FILE='master-bin.000003',
    -> MASTER_LOG_POS=401、
    -> MASTER_CONNECT_RETRY=10;
MariaDB [(なし)]> START SLAVE;
MariaDB [(なし)]> SHOW MASTER LOGS;
+--------------------+------------+
| ログ名 | ファイルサイズ |
+--------------------+------------+
| mariadb-bin.000001 | 245 |
+--------------------+------------+
MariaDB [(なし)]> 'replpass' によって識別される repluser@'192.168.0.%' に *.* のレプリケーション スレーブを許可します。

3) スレーブノードのスレーブノード

[root@slave2 ~]# vim /etc/my.cnf
[mysqld]
読み取り専用=オン
サーバーID=3
relay_log=リレーログ
リレーログインデックス=リレーログインデックス
[root@slave2 ~]# systemctl mariadbを起動します
MariaDB [(なし)]> マスターを変更する
    -> MASTER_HOST='192.168.0.8',
    -> MASTER_USER='repluser',
    -> MASTER_PASSWORD='replpass',
    -> マスターポート=3306、
    -> MASTER_LOG_FILE='mariadb-bin.000001',
    -> MASTER_LOG_POS=245、
    -> MASTER_CONNECT_RETRY=10;
MariaDB [(なし)]> START SLAVE;

4) スレーブノードのスレーブノード2

[root@slave3 ~]# vim /etc/my.cnf
[mysqld]
読み取り専用=オン
サーバーID=4
relay_log=リレーログ
リレーログインデックス=リレーログインデックス
[root@slave3 ~]# systemctl mariadbを起動します
MariaDB [(なし)]> マスターを変更する
    -> MASTER_HOST='192.168.0.8',
    -> MASTER_USER='repluser',
    -> MASTER_PASSWORD='replpass',
    -> マスターポート=3306、
    -> MASTER_LOG_FILE='mariadb-bin.000001',
    -> MASTER_LOG_POS=245、
    -> MASTER_CONNECT_RETRY=10;
MariaDB [(なし)]> START SLAVE;
カスケードレプリケーションが構築されたので、テストしてみましょう。

4. マスター-マスターレプリケーションアーキテクチャ

発生する可能性のある問題: データの不整合が発生するため、注意して使用してください。考慮すべき重要なポイント: ID を自動的に増加します。
奇数IDを使用するようにノードを構成する
auto_increment_offset=1 開始点
auto_increment_increment=2 増分率 別のノードが偶数IDを使用する
自動増分オフセット=2
自動増分_増分=2

1) メイン1

[mysqld]
ログビン
binlog_format=行
ログベース名=master1
サーバーID=1
relay_log=リレーログ
リレーログインデックス=リレーログインデックス
auto_increment_offset=1 #自己増分フィールドは1から始まります auto_increment_increment=2 #毎回2ずつ増加します。つまり、master1ノードによって書き込まれたデータのidフィールドはすべて奇数です [root@master ~]# systemctl start mariadb
MariaDB [(なし)]> SHOW MASTER LOGS;
+--------------------+------------+
| ログ名 | ファイルサイズ |
+--------------------+------------+
| マスター1-bin.000001 | 27033 |
| マスター1-bin.000002 | 942126 |
| マスター1-bin.000003 | 245 |
+--------------------+------------+
MariaDB [(なし)]> 'replpass' によって識別される repluser@'192.168.0.%' に *.* のレプリケーション スレーブを許可します。
MariaDB [(なし)]> マスターを変更する
    -> MASTER_HOST='192.168.0.8',
    -> MASTER_USER='repluser',
    -> MASTER_PASSWORD='replpass',
    -> マスターポート=3306、
    -> MASTER_LOG_FILE='master2-bin.000003',
    -> MASTER_LOG_POS=245、
    -> MASTER_CONNECT_RETRY=10;
MariaDB [(なし)]> START SLAVE;

2) メイン2

[mysqld]
ログビン
binlog_format=行
ログベース名=マスター2
サーバーID=2
relay_log=リレーログ
リレーログインデックス=リレーログインデックス
auto_increment_offset=2 #自己増分フィールドは 1 から始まります auto_increment_increment=2 #毎回 2 ずつ増加します。つまり、master1 ノードによって書き込まれたデータの id フィールドはすべて偶数です [root@master2 ~]# systemctl start mariadb
MariaDB [(なし)]> SHOW MASTER LOGS;
+--------------------+------------+
| ログ名 | ファイルサイズ |
+--------------------+------------+
| マスター2-bin.000001 | 27036 |
| マスター2-bin.000002 | 942126 |
| マスター2-bin.000003 | 245 |
+--------------------+------------+
MariaDB [(なし)]> 'replpass' によって識別される repluser@'192.168.0.%' に *.* のレプリケーション スレーブを許可します。
MariaDB [(なし)]> マスターを変更する
    -> MASTER_HOST='192.168.0.7',
    -> MASTER_USER='repluser',
    -> MASTER_PASSWORD='replpass',
    -> マスターポート=3306、
    -> MASTER_LOG_FILE='master1-bin.000003',
    -> MASTER_LOG_POS=245、
    -> MASTER_CONNECT_RETRY=10;
MariaDB [(なし)]> START SLAVE;

3) テスト

master1 にテーブルを作成し、データを追加します。MariaDB [(none)]> CREATE DATABASE db1;
MariaDB [(なし)]> db1 を使用する
MariaDB [db1]> テーブル t1 を作成します (id INT(2) AUTO_INCREMENT PRIMARY KEY、name CHAR(30))。
MariaDB [db1]> INSERT t1(name) VALUES ('tom');
MariaDB [db1]> INSERT t1(name) VALUES ('maria'); 
MariaDB [db1]> t1 から * を選択します。
+----+-------+
| ID | 名前 |
+----+-------+
| 1 | トム |
| 3 | マリア |
+----+-------+
master2MariaDB にデータを追加します [db1]> INSERT t1(name) VALUES ('jerry');
MariaDB [db1]> INSERT t1(name) VALUES ('tony'); 
MariaDB [db1]> t1 から * を選択します。
+----+-------+
| ID | 名前 |
+----+-------+
| 1 | トム |
| 3 | マリア |
| 4 | ジェリー |
| 6 | トニー |

5. 半同期レプリケーションの実装

デフォルトでは、MySQL のレプリケーション機能は非同期であり、最高のパフォーマンスを提供できます。マスター データベースは、binlog ログをスレーブ データベースに送信すると終了し、スレーブ データベースがそれを受信したかどうかを確認しません。つまり、マスターサーバーまたはスレーブサーバーに障害が発生した場合、スレーブサーバーはマスターサーバーから送信された binlog ログを受信できない可能性があり、マスターサーバーとスレーブサーバーの間でデータの不整合が発生し、回復中にデータが失われることもあります。準同期レプリケーションのメカニズムは、マスターノードとスレーブノードが同期されている場合にのみ、そのうちの 1 つだけが同期を完了し、書き込み完了を返すというものです。このメカニズムにより、データのセキュリティが確保されます。

1) マスターノード

[root@master ~]# vim /etc/my.cnf
[mysqld]
ログビン
binlog_format=行
ログベース名=マスター
サーバーID=1
relay_log=リレーログ
リレーログインデックス=リレーログインデックス
[root@master ~]# systemctl mariadbを再起動します
MariaDB [(なし)]> 'replpass' によって識別される repluser@'192.168.0.%' に *.* のレプリケーション スレーブを許可します。
MariaDB [(なし)]> SHOW MASTER LOGS;
+-------------------+----------+
| ログ名 | ファイルサイズ |
+-------------------+----------+
| マスターbin.000001 | 26753 |
| マスターbin.000002 | 921736 |
| マスターbin.000003 | 401 |
+-------------------+----------+
MariaDB [(なし)]> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; #モジュールをインストール MariaDB [(なし)]> SET GLOBAL rpl_semi_sync_master_enabled=1; #準同期機能を有効にする MariaDB [(なし)]> SHOW GLOBAL VARIABLES LIKE '%semi%';
+------------------------------------+-------+
| 変数名 | 値 |
+------------------------------------+-------+
| rpl_semi_sync_master_enabled | ON | #有効 | rpl_semi_sync_master_timeout | 10000 |
| rpl_semi_sync_master_trace_level | 32 |
| rpl_semi_sync_master_wait_no_slave | オン |
+------------------------------------+-------+
MariaDB [(なし)]> SHOW GLOBAL STATUS LIKE '%semi%';
+--------------------------------------------+-------+
| 変数名 | 値 |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients | 0 |
| Rpl_semi_sync_master_net_avg_wait_time | 0 |
| Rpl_semi_sync_master_net_wait_time | 0 |
| Rpl_semi_sync_master_net_waits | 0 |
| Rpl_semi_sync_master_no_times | 0 |
| Rpl_semi_sync_master_no_tx | 0 |
| Rpl_semi_sync_master_status | オン |
| Rpl_semi_sync_master_timefunc_failures | 0 |
| Rpl_semi_sync_master_tx_avg_wait_time | 0 |
| Rpl_semi_sync_master_tx_wait_time | 0 |
| Rpl_semi_sync_master_tx_waits | 0 |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0 |
| Rpl_semi_sync_master_wait_sessions | 0 |
| Rpl_semi_sync_master_yes_tx | 0 |
+--------------------------------------------+-------+

2) ノード1から

[root@slave1 ~]# vim /etc/my.cnf
[mysqld]
読み取り専用=オン
ログビン
binlog_format=行
ログベース名=スレーブ
サーバーID=2
relay_log=リレーログ
リレーログインデックス=リレーログインデックス
[root@slave1 ~]# systemctl mariadbを再起動します
MariaDB [(なし)]> マスターを変更する
    -> MASTER_HOST='192.168.0.7',
    -> MASTER_USER='repluser',
    -> MASTER_PASSWORD='replpass',
    -> マスターポート=3306、
    -> MASTER_LOG_FILE='master-bin.000003',
    -> MASTER_LOG_POS=401、
    -> MASTER_CONNECT_RETRY=10;
MariaDB [(なし)]> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
MariaDB [(なし)]> SET GLOBAL rpl_semi_sync_slave_enabled=1;
MariaDB [(なし)]> START SLAVE;
MariaDB [(なし)]> SHOW MASTER LOGS;
+------------------+-----------+
| ログ名 | ファイルサイズ |
+------------------+-----------+
| スレーブ bin.000001 | 26753 |
| スレーブ bin.000002 | 921736 |
| スレーブ bin.000003 | 245 |
+------------------+-----------+
MariaDB [(なし)]> 'replpass' によって識別される repluser@'192.168.0.%' に *.* のレプリケーション スレーブを許可します。

3) ノード2から

[root@slave2 ~]# vim /etc/my.cnf
[mysqld]
読み取り専用=オン
サーバーID=3
relay_log=リレーログ
リレーログインデックス=リレーログインデックス
[root@slave2 ~]# systemctl mariadbを再起動します
MariaDB [(なし)]> マスターを変更する
    -> MASTER_HOST='192.168.0.8',
    -> MASTER_USER='repluser',
    -> MASTER_PASSWORD='replpass',
    -> マスターポート=3306、
    -> MASTER_LOG_FILE='slave-bin.000003',
    -> MASTER_LOG_POS=245、
    -> MASTER_CONNECT_RETRY=10;
MariaDB [(なし)]> START SLAVE;

4) ノード3から

[root@slave3 ~]# vim /etc/my.cnf
[mysqld]
読み取り専用=オン
サーバーID=4
relay_log=リレーログ
リレーログインデックス=リレーログインデックス
[root@slave3 ~]# systemctl mariadbを再起動します
MariaDB [(なし)]> マスターを変更する
    -> MASTER_HOST='192.168.0.8',
    -> MASTER_USER='repluser',
    -> MASTER_PASSWORD='replpass',
    -> マスターポート=3306、
    -> MASTER_LOG_FILE='slave-bin.000003',
    -> MASTER_LOG_POS=245、
    -> MASTER_CONNECT_RETRY=10;
MariaDB [(なし)]> START SLAVE;

6. 暗号化された送信と複製の実装

デフォルトのマスター/スレーブ レプリケーション プロセス、または MySQL/MariaDB にリモートで接続する場合、リンク通信のすべてのデータはプレーン テキストです。外部ネットワークでデータにアクセスしたり、データを複製したりすると、セキュリティ上のリスクが生じます。 SSL/TLS 暗号化を介してコピーする方法により、データのセキュリティがさらに向上します。

メインサーバーでSSLを有効にする: [mysqld] sslの行を追加する
マスター サーバーを証明書と秘密キーで構成し、SSL 接続を必要とするレプリケーション アカウントを作成します。スレーブ サーバーから CHANGER MASTER TO コマンドを使用するときに、SSL 関連のオプションを指定します。

MariaDB [(なし)]> '%ssl%' のような変数を表示します。
+---------------+----------+
| 変数名 | 値 |
+---------------+----------+
| have_openssl | 無効 |
| have_ssl | 無効 |
| SSL_CA | |
| ssl_capath | |
| SSL証明書 | |
| ssl_cipher | |
| SSL キー | |
+---------------+----------+

特記事項: 設定前に、MySQL サービスが SSL 機能をサポートしているかどうかを確認してください。have_ssl の値が「DISABLED」の場合はサポートされています。「NO」の場合はサポートされていないため、再コンパイルしてインストールするか、SSL 機能を備えたバージョンをインストールする必要があります。

1) カリフォルニア州

[root@CA ~]# mkdir /etc/my.cnf.d/ssl/
[root@CA ~]# cd /etc/my.cnf.d/ssl/
[root@CA ssl]# openssl genrsa 2048 > cakey.pem
[root@CA ssl]# openssl req -new -x509 -key cakey.pem -out cacert.pem -days 3650 #自己署名証明書 国名 (2 文字コード) [XX]:CN
    州または県名(フルネーム) []:北京
    地域名(例:都市)[デフォルトの都市]:北京
    組織名(例:会社)[デフォルト会社 Ltd]:testmysqlca 
    組織単位名(例:セクション)[]:opt
    共通名(例:あなたの名前またはサーバーのホスト名)[]:ca.testmysqlca.com

[root@CA ssl]# openssl req -newkey rsa:2048 -days 365 -nodes -keyout master.key > master.csr
    国名(2文字コード)[XX]:CN
    州または県名(フルネーム) []:北京
    地域名(例:都市)[デフォルトの都市]:北京
    組織名(例:会社)[デフォルト会社 Ltd]:testmysqlca
    組織単位名(例:セクション)[]:opt
    共通名(例:あなたの名前またはサーバーのホスト名)[]:master.testmysqlca.com
[root@CA ssl]# openssl x509 -req -in master.csr -CA cacert.pem -CAkey cakey.pem -set_serial 01 > master.crt #マスター証明書に署名 [root@CA ssl]# openssl req -newkey rsa:2048 -days 365 -nodes -keyout slave.key > slave.csr
    国名(2文字コード)[XX]:CN
    州または県名(フルネーム) []:北京
    地域名(例:都市)[デフォルトの都市]:北京
    組織名(例:会社)[デフォルト会社 Ltd]:testmysqlca 
    組織単位名(例:セクション)[]:opt
    共通名(例:あなたの名前またはサーバーのホスト名)[]:slave.testmysqlca.com
[root@CA ssl]# openssl x509 -req -in slave.csr -CA cacert.pem -CAkey cakey.pem -set_serial 02 > slave.crt #スレーブ証明書に署名 [root@CA ssl]# openssl req -newkey rsa:2048 -days 365 -nodes -keyout slave2.key > slave2.csr
国名(2文字コード)[XX]:CN
州または県名(フルネーム) []:北京
地域名(例:都市)[デフォルトの都市]:北京
組織名(例:会社)[デフォルト会社 Ltd]:testmysqlca
組織単位名(例:セクション)[]:opt
共通名(例:あなたの名前またはサーバーのホスト名)[]:slave2.testmysqlca.com
[root@CA ssl]# openssl x509 -req -in slave2.csr -CA cacert.pem -CAkey cakey.pem -set_serial 03 > slave2.crt #slave2 証明書に署名 [root@CA ssl]# openssl verify -CAfile cacert.pem master.crt slave.crt slave2.crt #証明書が利用可能かどうかを確認 master.crt: OK
スレーブ.crt: OK
slave2.crt: OK
まず、各ノードに /etc/my.cnf.d/ssl/ フォルダーを作成し、それぞれの証明書、CA 証明書、およびそれぞれのキー ファイルをそこにコピーします。[root@CA ssl]# scp cacert.pem master.crt master.key [email protected]:/etc/my.cnf.d/ssl/
[root@CA ssl]# scp cacert.pem slave.crt slave.key [email protected]:/etc/my.cnf.d/ssl/ 
[root@CA ssl]# scp cacert.pem slave2.crt slave2.key [email protected]:/etc/my.cnf.d/ssl/

2) マスター

[root@master ~]# mkdir /etc/my.cnf.d/ssl/
[root@master ~]# vim /etc/my.cnf
[mysqld]
ログビン
binlog_format=行
ログベース名=マスター
サーバーID=1
ssl #SSL 機能を有効にする ssl-ca=/etc/my.cnf.d/ssl/cacert.pem #CA 証明書のパスを指定する ssl-cert=/etc/my.cnf.d/ssl/master.crt #独自の証明書のパスを指定する ssl-key=/etc/my.cnf.d/ssl/master.key #独自のキーファイル パスを指定する [root@master ~]# systemctl restart mariadb
MariaDB [(なし)]> GRANT REPLICATION SLAVE ON *.* TO repluser@'192.168.0.%' IDENTIFIED BY 'replpass' REQUIRE SSL; # ユーザーを承認し、SSL ログインを有効にするようユーザーに強制します MariaDB [(なし)]> SHOW MASTER LOGS;
+-------------------+----------+
| ログ名 | ファイルサイズ |
+-------------------+----------+
| マスターbin.000001 | 26753 |
| マスターbin.000002 | 921736 |
| マスターbin.000003 | 413 |
+-------------------+----------+

3) 奴隷1

[root@slave1 ~]# mkdir /etc/my.cnf.d/ssl/
[root@slave1 ~]# mysql -urepluser -preplpass -h192.168.0.7 --ssl-ca=/etc/my.cnf.d/ssl/cacert.pem --ssl-cert=/etc/my.cnf.d/ssl/slave.crt --ssl-key=/etc/my.cnf.d/ssl/slave.key
[root@slave1 ~]# vim /etc/my.cnf
[mysqld]
読み取り専用=オン
サーバーID=2
relay_log=リレーログ
リレーログインデックス=リレーログインデックス
ssl
ssl-ca=/etc/my.cnf.d/ssl/cacert.pem
ssl-cert=/etc/my.cnf.d/ssl/slave.crt
ssl-key=/etc/my.cnf.d/ssl/slave.key
[root@slave1 ~]# systemctl mariadbを再起動します
MariaDB [(なし)]> マスターを変更する
    -> MASTER_HOST='192.168.0.7',
    -> MASTER_USER='repluser',
    -> MASTER_PASSWORD='replpass',
    -> マスターポート=3306、
    -> MASTER_LOG_FILE='master-bin.000003',
    -> MASTER_LOG_POS=413、
    -> MASTER_CONNECT_RETRY=10、
    -> MASTER_SSL=1; #SSL接続を有効にするには指定する必要があることに注意してください MariaDB [(none)]> START SLAVE;

4) 奴隷2

[root@slave2 ~]# mkdir /etc/my.cnf.d/ssl/
[root@slave2 ~]# mysql -urepluser -preplpass -h192.168.0.7 --ssl-ca=/etc/my.cnf.d/ssl/cacert.pem --ssl-cert=/etc/my.cnf.d/ssl/slave2.crt --ssl-key=/etc/my.cnf.d/ssl/slave2.key
[root@slave2 ~]# vim /etc/my.cnf
[mysqld]
読み取り専用=オン
サーバーID=3
relay_log=リレーログ
リレーログインデックス=リレーログインデックス
ssl
ssl-ca=/etc/my.cnf.d/ssl/cacert.pem
ssl-cert=/etc/my.cnf.d/ssl/slave2.crt
ssl-key=/etc/my.cnf.d/ssl/slave2.key
[root@slave2 ~]# systemctl mariadbを再起動します
MariaDB [(なし)]> マスターを変更する
    -> MASTER_HOST='192.168.0.7',
    -> MASTER_USER='repluser',
    -> MASTER_PASSWORD='replpass',
    -> マスターポート=3306、
    -> MASTER_LOG_FILE='master-bin.000003',
    -> MASTER_LOG_POS=413、
    -> MASTER_CONNECT_RETRY=10、
    -> MASTER_SSL=1;
MariaDB [(なし)]> START SLAVE;

7. MySQLレプリケーションに関連する手順と変数の概要

オプション:

  • log_binはバイナリログを有効にします。これはカスケードレプリケーションのマスターノードまたはスレーブノードで有効にする必要があります。
  • binlog_format=ROW バイナリログの記録は行ベースなので、有効にすることを強くお勧めします。
  • log-basename=master | slave ... バイナリログのプレフィックス名。必須ではないが推奨される。
  • server_id = # サーバー ID。各ノードの ID は一意である必要があります。
  • relay_log = relay-log はリレー ログをオンにし、ファイル名を relay-log で始めます。
  • relay_log_index = relay-log.index リレーログインデックスファイル
  • log_slave_updates は、SQL スレッドがリレー ログを再読み取りするときに、データの変更操作をバイナリ ログとして記録するために使用されます。カスケード レプリケーションで使用されます。
  • ssl ssl機能を有効にする
    • ssl-ca=/etc/my.cnf.d/ssl/cacert.pem
    • ssl-cert=/etc/my.cnf.d/ssl/master.crt
    • ssl-key=/etc/my.cnf.d/ssl/master.key
  • sync_binlog=1 書き込み後すぐにバイナリログをディスクに同期する
    • innodb_flush_log_at_trx_commit=1 各トランザクションのコミットは、ログをディスクに直ちに同期します。
    • sync_master_info=# #イベント後、master.infoがディスクに同期されます
  • skip_slave_start=ON スレーブを自動的に起動しない
  • sync_relay_log=# #書き込み後にリレーログをディスクに同期する
  • sync_relay_log_info=# #トランザクション後にrelay-log.infoをディスクに同期します
  • auto_increment_offset=1 マスター-マスターレプリケーションで使用される自動増加開始点

変数:

  • replicate_do_db=はレプリケーションデータベースのホワイトリストを指定します
  • replicate_ignore_db=レプリケーションデータベースのブラックリストを指定する
  • replicate_do_table=はレプリケーションテーブルのホワイトリストを指定します
  • replicate_ignore_table= レプリケーションテーブルのブラックリストを指定します
  • replicate_wild_do_table = foo%.bar% はワイルドカードをサポートします
  • replicate_wild_ignore_table=複製テーブル、ブラックリストを指定する
  • rpl_semi_sync_slave_enabled=1 準同期レプリケーションを有効にします。これにはモジュールのインストールが必要です。

命令:

  • START SLAVE; マスタースレーブレプリケーションを開始する
  • STOP SLAVE; レプリケーションを停止する
  • SHOW SLAVE STATUS; レプリケーションステータスを表示する
    • Seconds_Behind_Master: 0 スレーブサーバーがマスターサーバーより遅れているかどうか
  • RESET SLAVE ALL; スレーブサーバーの設定をリセットします
  • MASTER_SSL=1、CHANGE MASTER TO とともに使用して SSL 暗号化レプリケーションを有効にします。
    • MASTER_SSL_CA = '/etc/my.cnf.d/ssl/cacert.pem'、
    • MASTER_SSL_CERT = '/etc/my.cnf.d/ssl/slave.crt'、
    • MASTER_SSL_KEY = '/etc/my.cnf.d/ssl/slave.key';
  • PURGE { BINARY | MASTER } LOGS { TO 'log_name' | BEFORE datetime_expr } バイナリログを削除します。注意してください。
  • SHOW MASTER STATUS バイナリログのステータスを表示する
  • SHOW BINLOG EVENTS バイナリログを表示する
  • バイナリログを表示 バイナリログを表示

これで、MySQL シリーズ 13 MySQL レプリケーションに関するこの記事は終了です。MySQL レプリケーションの詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL5.7 並列レプリケーションの原理と実装
  • MySQL マスタースレーブレプリケーションと読み取り書き込み分離の詳細な説明
  • MySQL マスタースレーブレプリケーション切断の一般的な修復方法
  • MySQL レプリケーション問題の 3 つのパラメータの分析
  • MySql マスタースレーブレプリケーションメカニズムの包括的な分析

<<:  ウェブサイトはグレー表示されています。画像を含む互換コードはすべてのブラウザをサポートしています

>>:  503 サービス利用不可エラーの解決方法の説明

推薦する

CSS 要素を表示および非表示にする 9 つの方法

Web ページの制作では、要素の表示と非表示は非常に一般的な要件です。この記事では、要素を表示したり...

MySQL ジョイントインデックス(複合インデックス)の実装

共同インデックスこの記事におけるジョイントインデックスの定義は次のとおりです (MySQL): AL...

MySQL の WriteSet 並列レプリケーションの簡単な分析

【歴史的背景】私は 3 年間 MySQL-DBA として働いてきましたが、MySQL が「基本的に利...

MySQLテーブルを削除する方法

MySQL でテーブルを削除するのは非常に簡単ですが、削除コマンドを実行するとすべてのデータが消えて...

Vue.jsで実装されたカレンダープラグインの使い方を詳しく説明します

本日実装する機能は、以下の機能です。vue.js シミュレーションカレンダープラグインさて、もう無駄...

Navicat による MySQL パーティショニングの実践

MySQLのパーティショニングは、非常に大きなテーブルを管理するのに役立ちます。MySQLのパーティ...

ウェブサイト上で flv/MP4 やその他のビデオ ファイルを再生できない問題は、MIME タイプに関連しています。

ウェブサイトを作成している際に、flv や MP4 形式などのビデオ ファイルはローカルでは正常に再...

JavaScript シングルスレッドと非同期の詳細

目次1. タスクキュー2. 混乱を招く問題を説明する1. setTimeout(f1,0)とは何です...

Nginx フォワード プロキシとリバース プロキシ、および負荷分散機能の構成コード例

この記事は主に、Nginx のフォワード プロキシとリバース プロキシ、および負荷分散機能の設定コー...

Vite2.0の落とし穴

目次Viteプロジェクトビルドの最適化他のやっとこれは前回の記事の補足です。設定プロジェクトで遭遇し...

HTML内の画像はbase64でエンコードされた文字列に直接置き換えられます

最近、画像はあるのに外部画像リソースが参照されていないウェブページを見つけました。気になりました。コ...

Linux (Ubuntu) での MySQL 5.7.17 のインストールと設定のチュートリアル

序文以前、MySQL 5.6 をインストールしました。3 か月後、開発者から MySQL で JSO...

入力できない無効な値はアクションレイヤーに渡すことができません

フォームを入力不可にしたい場合は、フォームを次のように設定します。コードをコピーコードは次のとおりで...

間違った MySQL コマンドをキャンセルしたい場合はどうすればいいですか?

間違った mysql コマンドを入力したのでキャンセルしたいです。どうすればいいですか? ctrl ...

nginx 503 サービスが一時的に利用できない問題を解決する方法

最近、ウェブサイトを更新すると、503 Service Temporarily Unavailabl...