mysql冗長化

mysqlをマスター・スレイブ構成にして冗長化を図るときには以下のような設定を行います。

マスター側の設定

/etc/my.cnfに以下を追加し再起動

server-id = 1
log-bin = /var/lib/mysql/mysql-bin

レプリケーション用のユーザを作成し、replication slave権限を追加

CREATE USER 'repl'@'(スレーブのIP)' IDENTIFIED BY 'repl';
GRANT REPLICATION SLAVE ON *.* TO repl@'(スレーブのIP)';

スレーブ設定のためマスターの状態を控える

SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 |      120 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

スレーブ側の設定

/etc/my.cnfに以下を追加して再起動

server-id = 2
read_only

mysqlを起動しマスターサーバの設定を行う

CHANGE MASTER TO  
MASTER_HOST = '(マスタのIP)' , 
MASTER_USER = 'repl' , 
MASTER_PASSWORD = 'repl' ,
MASTER_PORT = 3306, 
MASTER_LOG_FILE = '(バイナリログのファイル名)' ,
MASTER_LOG_POS  = (バイナリログのポジション);

スレーブをstartする

START SLAVE;

slaveがmasterと接続できているか確認

SHOW SLAVE STATUS\G;
→slave_IO_State: Waiting for master to send event ならOK