2.8. TLS 暗号化を使用した MySQL のレプリケーション
MySQL には、基本的なものから高度なものまで、レプリケーション用のさまざまな設定オプションが用意されています。このセクションでは、グローバルトランザクション識別子 (GTID) を使用して、新しくインストールした MySQL サーバーに MySQL でレプリケートするトランザクションベースの方法を説明します。GTID を使用すると、トランザクションの識別と整合性の検証が簡素化されます。
レプリケーションに既存の MySQL サーバーを使用する場合は、最初にデータを同期する必要があります。詳細は、アップストリームのドキュメント を参照してください。
2.8.1. MySQL ソースサーバーの設定 リンクのコピーリンクがクリップボードにコピーされました!
MySQL ソースサーバーを適切に実行し、TLS プロトコルを介してデータベースサーバーで行われたすべての変更をレプリケートするために必要な設定オプションを設定できます。
前提条件
- ソースサーバーがインストールされている。
ソースサーバーに TLS がセットアップ されている。
重要ソース証明書とレプリカ証明書が、同じ認証局によって署名されている必要があります。
手順
[mysqld]
セクションの/etc/my.cnf.d/mysql-server.cnf
ファイルに以下のオプションを含めます。bind-address=source_ip_adress
このオプションは、レプリカからソースへの接続に必要です。
server-id=id
id は一意である必要があります。
log_bin=path_to_source_server_log
このオプションは、MySQL ソースサーバーのバイナリーログファイルへのパスを定義します。例:
log_bin=/var/log/mysql/mysql-bin.log
gtid_mode=ON
このオプションは、サーバー上でグローバルトランザクション識別子 (GTID) を有効にします。
enforce-gtid-consistency=ON
サーバーは、GTID を使用して安全にログに記録できるステートメントのみの実行を許可することにより、GTID の整合性を強化します。
オプション:
binlog_do_db=db_name
選択したデータベースのみを複製する場合は、このオプションを使用します。選択した複数のデータベースを複製するには、各データベースを個別に指定します。
binlog_do_db=db_name1 binlog_do_db=db_name2 binlog_do_db=db_name3
binlog_do_db=db_name1 binlog_do_db=db_name2 binlog_do_db=db_name3
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション:
binlog_ignore_db=db_name
このオプションを使用して、特定のデータベースをレプリケーションから除外します。
mysqld
サービスを再起動します。systemctl restart mysqld.service
# systemctl restart mysqld.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.8.2. MySQL レプリカサーバーの設定 リンクのコピーリンクがクリップボードにコピーされました!
レプリケーションを成功させるために MySQL レプリカサーバーに必要な設定オプションを設定できます。
前提条件
- レプリカサーバーがインストールされている。
レプリカサーバーに TLS がセットアップ されている。
重要ソース証明書とレプリカ証明書が、同じ認証局によって署名されている必要があります。
手順
[mysqld]
セクションの/etc/my.cnf.d/mysql-server.cnf
ファイルに以下のオプションを含めます。server-id=id
id は一意である必要があります。
relay-log=path_to_replica_server_log
リレーログは、レプリケーション中に MySQL レプリカサーバーによって作成されたログファイルのセットです。
log_bin=path_to_replica_sever_log
このオプションは、MySQL レプリカサーバーのバイナリーログファイルへのパスを定義します。例:
log_bin=/var/log/mysql/mysql-bin.log
このオプションはレプリカでは必須ではありませんが、強く推奨します。
gtid_mode=ON
このオプションは、サーバー上でグローバルトランザクション識別子 (GTID) を有効にします。
enforce-gtid-consistency=ON
サーバーは、GTID を使用して安全にログに記録できるステートメントのみの実行を許可することにより、GTID の整合性を強化します。
log-replica-updates=ON
このオプションにより、ソースサーバーから受信した更新がレプリカのバイナリーログに記録されます。
skip-replica-start=ON
このオプションは、レプリカサーバーの起動時に、レプリカサーバーがレプリケーションスレッドを開始しないようにします。
オプション:
binlog_do_db=db_name
特定のデータベースのみを複製する場合は、このオプションを使用します。複数のデータベースを複製するには、各データベースを個別に指定します。
binlog_do_db=db_name1 binlog_do_db=db_name2 binlog_do_db=db_name3
binlog_do_db=db_name1 binlog_do_db=db_name2 binlog_do_db=db_name3
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション:
binlog_ignore_db=db_name
このオプションを使用して、特定のデータベースをレプリケーションから除外します。
mysqld
サービスを再起動します。systemctl restart mysqld.service
# systemctl restart mysqld.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.8.3. MySQL ソースサーバーでのレプリケーションユーザーの作成 リンクのコピーリンクがクリップボードにコピーされました!
レプリケーションユーザーを作成し、このユーザーにレプリケーショントラフィックに必要なパーミッションを付与する必要があります。この手順は、適切なパーミッションを持つレプリケーションユーザーを作成する方法を示しています。これらの手順は、ソースサーバーでのみ実行してください。
前提条件
- ソースサーバーは、MySQL ソースサーバーの設定 で説明されているように、インストールおよび設定されている。
手順
レプリケーションユーザーを作成します。
mysql> CREATE USER 'replication_user'@'replica_server_hostname' IDENTIFIED WITH mysql_native_password BY 'password';
mysql> CREATE USER 'replication_user'@'replica_server_hostname' IDENTIFIED WITH mysql_native_password BY 'password';
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ユーザーにレプリケーションパーミッションを付与します。
mysql> GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'replica_server_hostname';*
mysql> GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'replica_server_hostname';*
Copy to Clipboard Copied! Toggle word wrap Toggle overflow MySQL データベースの付与テーブルをリロードします。
mysql> FLUSH PRIVILEGES;
mysql> FLUSH PRIVILEGES;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ソースサーバーを読み取り専用状態に設定します。
mysql> SET @@GLOBAL.read_only = ON;
mysql> SET @@GLOBAL.read_only = ON;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.8.4. MySQL レプリカサーバーをソースサーバーに接続する リンクのコピーリンクがクリップボードにコピーされました!
MySQL レプリカサーバーで、認証情報とソースサーバーのアドレスを設定する必要があります。次の手順を使用して、レプリカサーバーを実装します。
前提条件
- ソースサーバーは、MySQL ソースサーバーの設定 で説明されているように、インストールおよび設定されている。
- レプリカサーバーは、MySQL レプリカサーバーの設定 で説明されているように、インストールおよび設定されている。
- レプリケーションユーザーを作成している。MySQL ソースサーバーでのレプリケーションユーザーの作成 を参照してください。
手順
レプリカサーバーを読み取り専用状態に設定します。
mysql> SET @@GLOBAL.read_only = ON;
mysql> SET @@GLOBAL.read_only = ON;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow レプリケーションソースを設定します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow MySQL レプリカサーバーでレプリカスレッドを開始します。
mysql> START REPLICA;
mysql> START REPLICA;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ソースサーバーとレプリカサーバーの両方で、読み取り専用状態の設定を解除します。
mysql> SET @@GLOBAL.read_only = OFF;
mysql> SET @@GLOBAL.read_only = OFF;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: デバッグの目的で、レプリカサーバーのステータスを検査します。
mysql> SHOW REPLICA STATUS\G;
mysql> SHOW REPLICA STATUS\G;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記レプリカサーバーの起動または接続に失敗した場合は、
SHOW MASTER STATUS
コマンドの出力に表示されるバイナリーログファイルの位置に続く特定の数のイベントをスキップできます。たとえば、定義された位置から最初のイベントをスキップします。mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow その後、レプリカサーバーを再度起動してみます。
オプション: レプリカサーバーでレプリカスレッドを停止します。
mysql> STOP REPLICA;
mysql> STOP REPLICA;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.8.5. MySQL サーバーでのレプリケーションの検証 リンクのコピーリンクがクリップボードにコピーされました!
複数の MySQL サーバー間でレプリケーションを設定した後、それが機能することを確認する必要があります。
手順
ソースサーバーにサンプルデータベースを作成します。
mysql> CREATE DATABASE test_db_name;
mysql> CREATE DATABASE test_db_name;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
test_db_name
データベースが、レプリカサーバーで複製されていることを確認します。 ソースサーバーまたはレプリカサーバーのいずれかで以下のコマンドを実行して、MySQL サーバーのバイナリーログファイルに関するステータス情報を表示します。
mysql> SHOW MASTER STATUS;
mysql> SHOW MASTER STATUS;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ソースで実行されたトランザクションの GTID のセットを示す
Executed_Gtid_Set
列は、空であってはなりません。注記レプリカサーバーで
SHOW REPLICA STATUS
を使用すると、同じ GTID のセットがExecuted_Gtid_Set
行に表示されます。