CentOS 6 + MySQL 5.6 + keepalive(2)
前回の続きです。
さて今回は前回の設定を準同期の設定に変更してみようと思います。
そんなにやること無いんで気楽に行きます。
rootで作業してます。
mysqldが立ち上がっている場合は
スレーブ、マスターの順に停止します。
マスター側の設定を変更します。
# vi /etc/my.cnf
plugin-load=rpl_semi_sync_master=semisync_master.so
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=3000
を追加し保存します。
続いてスレーブ側の設定を変更します。
# vi /etc/my.cnf
plugin-load=rpl_semi_sync_slave=semisync_slave.so
rpl_semi_sync_slave_enabled=1
を追加し保存します。
マスター、スレーブの順でmysqld を上げます。
# /etc/init.d/mysqld start
でログを見てみるとエラーwww
スレーブ側でスレーブを停止して再度マスターと同期
mysql>stop slave;
mysql> CHANGE MASTER TO
-> MASTER_HOST='192.168.0.51',
-> MASTER_USER='slave',
-> MASTER_PASSWORD='56789',
-> MASTER_LOG_FILE='mysql-bin.000004',
-> MASTER_POS=120;
ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository
はて?何故かエラーが。
mysql> show slave status;
を行うとmysql-bin.000004
pos 120で合ってる。
しょうがないから一度スレーブの状態をリセット
mysql> reset slave;
再度同期
mysql> CHANGE MASTER TO
-> MASTER_HOST='192.168.0.51',
-> MASTER_USER='slave',
-> MASTER_PASSWORD='56789',
-> MASTER_LOG_FILE='mysql-bin.000004',
-> MASTER_POS=120;
Query OK, 0 rows affected, 2 warnings (0.02 sec)
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
これで同期状態なので、マスタ側で
mysql> show status like 'Rpl%';
+--------------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients | 1 |
| Rpl_semi_sync_master_net_avg_wait_time | 0 |
| Rpl_semi_sync_master_net_wait_time | 0 |
| Rpl_semi_sync_master_net_waits | 0 |
| Rpl_semi_sync_master_no_times | 0 |
| Rpl_semi_sync_master_no_tx | 0 |
| Rpl_semi_sync_master_status | ON |
| Rpl_semi_sync_master_timefunc_failures | 0 |
| Rpl_semi_sync_master_tx_avg_wait_time | 0 |
| Rpl_semi_sync_master_tx_wait_time | 0 |
| Rpl_semi_sync_master_tx_waits | 0 |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0 |
| Rpl_semi_sync_master_wait_sessions | 0 |
| Rpl_semi_sync_master_yes_tx | 0 |
| Rpl_semi_sync_slave_status | OFF |
+--------------------------------------------+-------+
Rpl_semi_sync_master_clientsが1になっているので準同期です。
設定されているのでテストです。
マスタ側で
use test;
mysql> CREATE TABLE aic1(col INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
※use testでエラーになる場合はテスト用のdbを作成してください。
mysql> create database test;
スレーブ側で
use test;
mysql> select * from aic1;
Empty set (0.00 sec)
マスター側で
mysql> BEGIN;
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO aic1 VALUES (NULL);
Query OK, 1 row affected (0.00 sec)
スレーブ側で
mysql> stop slave;
マスター側で
mysql> commit;
Query OK, 0 rows affected (3.00 sec)
3.00 sec は rpl_semi_sync_master_timeout=3000 と設定した値です。
マスター側で
mysql> select * from aic1;
+-----+
| col |
+-----+
| 1 |
+-----+
1 row in set (0.00 sec)
ちゃんと反映されています。
スレーブ側で
mysql> select * from aic1;
Empty set (0.00 sec)
反映されていませんね。では
mysql> start slave;
mysql> select * from aic1;
+-----+
| col |
+-----+
| 1 |
+-----+
1 row in set (0.00 sec)
復帰しました。これで準同期はOKです。
keepaliveの続きをこの記事に書いてアップデートします。