はじめに
MySQLレプリケーションの設定手順を、自分の備忘として書き留めておきます
環境/構成
利用基盤:AWS
OS:RHEL9.5(EC2) ×2台
DB:MySQL 8.0.41
構成:Master/Slave 1台ずつ
手順
AWSでEC2インスタンスを作成後ssh接続し
両ノードで実施
rootユーザへ切り替え
sudo su -
mysql-serverパッケージをインストール
dnf install -y mysql-server
mysqlサーバの自動起動有効化と起動
systemctl enable --now mysqld
systemctl status mysqld
mysqlサーバのrootユーザパスワード設定
mysql -u root
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'パスワード';
mysql> quit
Master側で実施
DB設定ファイル修正
vi /etc/my.cnf
以下を追記
[mysqld]
server-id=1
log-bin=mysql-bin
binlog-format=ROW
サービス再起動
systemctl restart mysqld
レプリケーション用のユーザを作成
以下ではrepuserを作成
mysql -u root -p
mysql> CREATE USER 'repuser'@'SlaveのIPアドレス' IDENTIFIED BY 'repuser用のパスワード';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repuser'@'SlaveのIPアドレス';
mysql> FLUSH PRIVILEGES;
DBのロックと
Masterのbinlogを確認
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
Slave側で実施
DB設定ファイル修正
vi /etc/my.cnf
以下を追記
[mysqld]
server-id=2
relay-log=relay-log
read-only=1
サービス再起動
systemctl restart mysqld
レプリケーション接続設定
mysql -u root -p
mysql> CHANGE REPLICATION SOURCE TO
mysql> SOURCE_HOST='MasterのIPアドレス',
mysql> SOURCE_USER='repuser',
mysql> SOURCE_PASSWORD='repuserのパスワード',
mysql> SOURCE_LOG_FILE='上記で控えたbinlogファイル名',
mysql> SOURCE_LOG_POS=上記で控えたポジション;
レプリケーション開始とステータス確認
mysql> START REPLICA;
mysql> SHOW REPLICA STATUS\G
ステータスは
Replica_IO_Running: Yes
Replica_SQL_Running: Yes
を確認
Master側で実施
DBのロックを解除しておく
mysql> UNLOCK TABLES;
実際にレプリケーションされるか確認してみる
mysql> CREATE DATABASE test;
mysql> USE test;
mysql> CREATE TABLE t1 (id INT, msg VARCHAR(50));
mysql> INSERT INTO t1 VALUES (1, 'test');
mysql> SELECT * FROM t1;
以下のようにテーブルに値が入っていることを確認
+----+-------------------+
| id | msg |
+----+-------------------+
| 1 | test |
+----+-------------------+
1 row in set (0.00 sec)
Slave側で実施
レプリケーションされてテーブルが作成され値が入ってることを確認
mysql> USE test;
mysql> SELECT * FROM t1;
以下のようにテーブルに値が入っていることを確認
+----+-------------------+
| id | msg |
+----+-------------------+
| 1 | test |
+----+-------------------+
1 row in set (0.00 sec)