2.8. TLS 暗号化を使用した MySQL のレプリケーション
TLS 暗号化を使用した MySQL レプリケーションを設定すると、ソースサーバーとレプリカサーバーの間にセキュアなデータレプリケーション環境を構築できます。
レプリケーション自体は、バックアップソリューションとしては十分ではありません。レプリケーションは、ハードウェア障害からソースサーバーを保護しますが、データ損失に対する保護は保証していません。
2.8.1. MySQL ソースサーバーの設定 リンクのコピーリンクがクリップボードにコピーされました!
MySQL ソースサーバーを適切に実行し、TLS プロトコルを介してデータベースサーバーで行われたすべての変更をレプリケートするために必要な設定オプションを設定できます。
前提条件
- ソースサーバーがインストールされている。
ソースサーバーに TLS がセットアップ されている。
重要ソース証明書とレプリカ証明書が、同じ認証局によって署名されている必要があります。
手順
[mysqld]セクションの/etc/my.cnf.d/mysql-server.cnfファイルに以下のオプションを含めます。bind-address=source_ip_adressこのオプションは、レプリカからソースへの接続に必要です。
server-id=idid は一意である必要があります。
log_bin=path_to_source_server_logこのオプションは、MySQL ソースサーバーのバイナリーログファイルへのパスを定義します。例:
log_bin=/var/log/mysql/mysql-bin.loggtid_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_name3Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション:
binlog_ignore_db=db_nameこのオプションを使用して、特定のデータベースをレプリケーションから除外します。
mysqldサービスを再起動します。systemctl restart mysqld.service
# systemctl restart mysqld.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.8.2. MySQL レプリカサーバーの設定 リンクのコピーリンクがクリップボードにコピーされました!
レプリケーションを成功させるために MySQL レプリカサーバーに必要な設定オプションを設定できます。
前提条件
- レプリカサーバーがインストールされている。
レプリカサーバーに TLS がセットアップ されている。
重要ソース証明書とレプリカ証明書が、同じ認証局によって署名されている必要があります。
手順
[mysqld]セクションの/etc/my.cnf.d/mysql-server.cnfファイルに以下のオプションを含めます。server-id=idid は一意である必要があります。
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_name3Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション:
binlog_ignore_db=db_nameこのオプションを使用して、特定のデータベースをレプリケーションから除外します。
mysqldサービスを再起動します。systemctl restart mysqld.service
# systemctl restart mysqld.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.8.3. MySQL ソースサーバーでのレプリケーションユーザーの作成 リンクのコピーリンクがクリップボードにコピーされました!
レプリカサーバーが接続してデータの変更を受信できるように、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行に表示されます。