記事目次
クリエイターブログ/システム開発
システム開発
MySQLのレプリケーション設定
概要
MySQL のレプリケーションは、1つの「マスタ」と1つ以上の「スレーブ」で構成されます。
マスタの DB に対して行った更新クエリをスレーブでも行うことで、複製された状態を実現します。
設定手順
前提
・CentOS 7.2
・MySQL 5.7.23
・マスタ1台、スレーブ1台の非同期レプリケーションの設定
・マスタに対象の DB が作成済みの状態とします
マスタの設定
my.cnfの設定変更
バイナリロギングを有効化し、サーバーID(任意の数字)を設定します。
# vi /etc/my.cnf
[mysqld]
log-bin = mysql-bin
server-id = 1001
MySQLを再起動して設定を反映させます。
# systemctl restart mysqld.service
ダンプデータを転送
テーブルをロックします。
mysql> flush tables with read lock;
Query OK, 0 rows affected (0.00 sec)
マスタのステータスを確認します。このときのFileとPositionの値はスレーブの設定で使用します。
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 1219 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
ダンプデータを取得後、スレーブに転送します。
# mysqldump -u root -p --all-databases --lock-all-tables > /root/dbdump.db
Enter password:
# scp dbdump.db root@192.168.XXX.XXX:/usr/local/src/
root@192.168.XXX.XXX's password:
dbdump.db 100% 784KB 784.1KB/s 00:00
テーブルのロックを解除しておきます。
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)
スレーブの設定
my.cnfの設定変更
サーバーID(マスタのサーバーIDと異なる、任意の数字)を設定します。
# vi /etc/my.cnf
[mysqld]
server-id = 1002
MySQLを再起動して設定を反映させます。
# systemctl restart mysqld.service
ダンプデータの取込
マスタから転送したダンプデータを取り込みます。
# /usr/bin/mysql -u root -p < dbdump.db
マスタ情報を登録
更新情報の取得先となる、マスタサーバーの情報を登録します。
このときの master_log_file、master_log_pos には、マスタのステータスの File と Position の値を使用します。
mysql> change master to
-> master_host = '192.168.XXX.XXX',
-> master_user = 'test_repliuser',
-> master_password = 'password',
-> master_log_file = 'mysql-bin.000001',
-> master_log_pos = 1219;
Query OK, 0 rows affected, 2 warnings (0.00 sec)
レプリケーションの開始
start slaveでレプリケーションを開始します。
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
確認
スレーブのステータスを確認します。
ステータスの Slave_IO_Running と Slave_SQL_Running が両方 Yes であれば、正常にレプリケーションが稼働しています。
mysql> show slave status \G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
・
・
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
・
・
1 row in set (0.00 sec)