RHEL、Rocky、AlmaLinuxでMySQLレプリケーションを設定する方法


データレプリケーションは、データの可用性を向上させ、アプリケーションの信頼性とパフォーマンスを向上させるために、複数のサーバー間でデータをコピーするプロセスです。 MySQLレプリケーションでは、データの一貫性を確保し、バックアップと冗長性を提供するために、データがデータベースからマスターサーバーから他のノードにリアルタイムでコピーされます。

このガイドでは、CentOS、Fedora、Rocky Linux、AlmaLinuxなどのRHELベースのディストリビューションでMySQL(マスタースレーブ)レプリケーションを設定する方法を示します。

これがMySQLレプリケーションラボのセットアップです。

MySQL Master - 10.128.0.14
MySQL Slave - 10.128.15.211

始めましょう…

ステップ1:マスターおよびスレーブサーバーにMySQLをインストールする

まず、マスターサーバーとスレーブサーバーの両方にMySQLデータベースをインストールします。

$ sudo dnf install @mysql

インストールが完了したら、データベースサーバーを起動するように指示します。

$ sudo systemctl start mysqld

次に、システムの起動時または再起動時に起動できるようにします。

$ sudo systemctl enable mysqld

その後、MySQLデータベースサーバーが次のように実行されていることを確認します。

$ sudo systemctl status mysqld

ステップ2:マスターサーバーとスレーブサーバーでMySQLを保護する

次のステップは、マスターサーバーとスレーブサーバーの両方でMySQLデータベースを保護することです。これは、デフォルト設定が安全でなく、ハッカーによって簡単に悪用される可能性のあるいくつかの抜け穴が存在するためです。

したがって、MySQLを強化するには、次のコマンドを実行します。

$ sudo mysql_secure_installation

まず、MySQLのルートパスワードを設定する必要があります。強力なルートパスワードを必ず指定してください。できれば、大文字、小文字、特殊文字、数字を組み合わせた8文字以上を使用してください。

残りのプロンプトについては、 Y と入力して、データベースサーバーを推奨設定に微調整します。

マスターノードとスレーブノードへのMySQLのインストールと強化が完了したら、次はマスターノードを構成します。

手順3:マスターノード(サーバー)を構成する

次のステップは、マスターノードを構成し、スレーブノードにマスターノードへのアクセスを許可することです。まず、mysql-server.cnf構成ファイルを編集する必要があります。

$ sudo vim /etc/my.cnf.d/mysql-server.cnf

[mysqld]セクションの下に次の行を追加します。

bind-address	 = 10.128.0.14
server-id 	 = 1
log_bin		 = mysql-bin

完了したら、変更を保存して終了します。次に、MySQLサーバーを再起動します。

$ sudo sysemctl restart mysqld

次に、MySQLシェルにログインします。

$ sudo mysql -u root -p

次のコマンドを実行して、レプリケーションのためにマスターとスレーブをバインドするために使用されるデータベースユーザーを作成します。

mysql> CREATE USER 'replica'@'10.128.15.211' IDENTIFIED BY '[email protected]';
mysql> GRANT REPLICATION SLAVE ON *.*TO 'replica'@'10.128.15.211';

変更を適用して、MySQLサーバーを終了します。

mysql> FLUSH PRIVILEGES;
mysql> EXIT;

マスターのステータスを確認します。

mysql> SHOW MASTER STATUS\G

ファイル名と位置をメモします。これは、後でレプリケーション用にスレーブを設定するときに必要になります。この場合、ファイル名は mysql-bin.000001およびPosition1232です。

ステップ4:スレーブノード(サーバー)を構成する

ここで、スレーブノードに戻ります。もう一度、mysql-server.cnf構成ファイルを編集します。

$ sudo vim /etc/my.cnf.d/mysql-server.cnf

前と同じように、これらの行を [mysqld]セクションの下に貼り付けます。スレーブのIPに対応するようにIPアドレスを変更します。また、別のサーバーIDを割り当てます。ここでは、値2を割り当てています。

bind-address	 = 10.128.15.211
server-id	 = 2
log_bin 	 = mysql-bin

変更を保存してファイルを終了します。次に、データベースサーバーを再起動します。

$ sudo systemctl restart mysqld

マスターノードから複製するようにスレーブノードを構成するには、スレーブのMySQLサーバーにログインします。

$ sudo mysql -u root -p

何よりもまず、レプリケーションスレッドを停止します。

mysql> STOP SLAVE;

次に、次のコマンドを実行して、マスターからデータベースを複製するようにスレーブノードを構成します。

mysql> CHANGE MASTER TO
     MASTER_HOST='10.128.0.14' ,
     MASTER_USER='replica' ,
     MASTER_PASSWORD='[email protected]' ,
     MASTER_LOG_FILE='mysql-bin.000001' ,
     MASTER_LOG_POS=1232;

MASTER_LOG_FILEフラグとMASTER_LOG_POSフラグは、手順1の最後のマスターノードからのファイルと位置の値に対応していることに注意してください。

MASTER_HOST、MASTER_USER、およびMASTER_PASSWORDは、それぞれマスターIPアドレス、レプリケーションユーザー、およびレプリケーションユーザーのパスワードに対応します。

次に、スレーブレプリケーションスレッドを開始します。

mysql> START SLAVE;

ステップ4:MySQLマスタースレーブレプリケーションをテストする

ここで、マスターノードとスレーブノード間のレプリケーションが機能しているかどうかをテストするには、マスターノードのMySQLデータベースサーバーにログインします。

$ sudo mysql -u root -p

テストデータベースを作成します。ここでは、テストデータベースはreplication_dbと呼ばれています。

mysql> CREATE DATABASE replication_db;
Verify the existence of the database.
mysql> SHOW DATABASES;

次に、スレーブノードに移動し、MySQLサーバーにログインして、replication_dbデータベースが存在することを確認します。以下の出力から、データベースが存在することがわかります。これは、マスターからスレーブノードへのレプリケーションが行われたことの確認です。

mysql> SHOW DATABASES;

これで、マスターノードからスレーブノードにデータベースをレプリケートできるMySQLマスタースレーブレプリケーションモデルを設定する方法を実証できました。