クリエイターブログ/システム開発

システム開発

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)
最新記事

クリエイターブログの関連リンク