この記事では、マスターデータベースサーバーとスレーブデータベースサーバー間でMySQLレプリケーションを設定する方法を示します。これは2つのサーバーを使用し、そのうちの1つはもう1つのサーバー(マスターからスレーブ)からデータを複製します。システム構成から信頼性とパフォーマンスを向上させたい場合は、この設定を使用してください。
RHELベースのシステムのセットアップについてサポートが必要な場合は、他のチュートリアルの1つを参照してください。
このガイドでは、このMySQLレプリケーションラボのセットアップを使用します。
MySQL Master - 192.168.56.1
MySQL Slave - 192.168.56.2
ステップ1:マスターサーバーとスレーブサーバーにMySQLをインストールする
マスターサーバーとスレーブサーバーの両方にMySQLデータベースをインストールすることから始めます。
$ sudo dnf install @mysql
or
$ sudo yum install mysql-server
インストールが完了したら、データベースサービスを開始します。
$ sudo systemctl start mysqld
次に、systemctlで開始できるようにします。これを有効にすると、サービスは起動シーケンスで開始するように指示されます。
$ sudo systemctl enable mysqld
次に、MySQLデータベースサーバーが実行されていることを確認します。
$ sudo systemctl status mysqld
ステップ2:マスターサーバーとスレーブサーバーで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 = 192.168.56.1
server-id = 1
log_bin = mysql-bin
完了したら、変更を保存して終了します。次に、MySQLサーバーを再起動します。
$ sudo sysemctl restart mysqld
次に、MySQLシェルにログインします。
$ sudo mysql -u root -p
次のコマンドを実行して、レプリケーションのためにマスターとスレーブをバインドするために使用されるデータベースユーザーを作成します。
mysql> CREATE USER 'replica'@'192.168.56.2' IDENTIFIED BY 'Password';
mysql> GRANT REPLICATION SLAVE ON *.*TO 'replica'@'192.168.56.2';
変更を適用して、MySQLサーバーを終了します。
mysql> FLUSH PRIVILEGES;
mysql> EXIT;
マスターのステータスを確認します。
mysql> SHOW MASTER STATUS\G
ファイル名と位置をメモします。これは、後でレプリケーション用にスレーブを設定するときに必要になります。この場合、ファイル名はbinlog.000001およびPosition854です。
ステップ4:スレーブノード(サーバー)を構成する
ここで、スレーブノードに戻ります。もう一度、mysql-server.cnf構成ファイルを編集します。
$ sudo vim /etc/my.cnf.d/mysql-server.cnf
前と同じように、これらの行を[mysqld]セクションの下に貼り付けます。スレーブのIPに対応するようにIPアドレスを変更します。また、別のサーバーIDを割り当てます。ここでは、値2を割り当てています。
bind-address = 192.168.56.2
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='192.168.56.1' ,
MASTER_USER='replica' ,
MASTER_PASSWORD='Password' ,
MASTER_LOG_FILE='binlog.000001' ,
MASTER_LOG_POS=854;
MASTERLOGFILEフラグとMASTERLOGPOSフラグは、ステップ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;
データベースの存在を確認します。
mysql> SHOW DATABASES;
次に、スレーブノードに移動し、MySQLサーバーにログインして、レプリケーションデータベースデータベースが存在することを再確認します。以下の出力にデータベースが存在することがわかります。これは、マスターからスレーブノードへのレプリケーションが発生したことを示しています。
mysql> SHOW DATABASES;