0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【備忘】mysqlのレプリケーション設定手順

Posted at

はじめに

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)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?