1.配置多主结构

多主结构可以用基于bin-log的位置来设置,也可以基于GTID来设置

1.前提条件

1/master info 与relay_log存储方式有两种,FILE与TABLE,默认是file。从库上要保留master info与relay_log的信息,因为多主结构,所以不能使用file的方式存储。

  1. mysql> STOP SLAVE;
  2. mysql> SET GLOBAL master_info_repository = 'TABLE';
  3. mysql> SET GLOBAL relay_log_info_repository = 'TABLE';

2/主库上创建同步的账号

mysql> CREATE USER 'ted'@'replicahost' IDENTIFIED BY 'password';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'ted'@'replicahost';

2.增加一个基于GTID的主库到主从结构中

mysql> CHANGE MASTER TO MASTER_HOST="source1", MASTER_USER="ted", \
MASTER_PASSWORD="password", MASTER_AUTO_POSITION=1 FOR CHANNEL "source_1";
mysql> CHANGE MASTER TO MASTER_HOST="source2", MASTER_USER="ted", \
MASTER_PASSWORD="password", MASTER_AUTO_POSITION=1 FOR CHANNEL "source_2";

3.增加一个基于position的主库到主从结构中

mysql> CHANGE MASTER TO MASTER_HOST="source1", MASTER_USER="ted", MASTER_PASSWORD="password", \
MASTER_LOG_FILE='source1-bin.000006', MASTER_LOG_POS=628 FOR CHANNEL "source_1";
mysql> CHANGE MASTER TO MASTER_HOST="source2", MASTER_USER="ted", MASTER_PASSWORD="password", \
MASTER_LOG_FILE='source2-bin.000018', MASTER_LOG_POS=104 FOR CHANNEL "source_2";

4.开启或停止主从同步

mysql> START/STOP SLAVE FOR CHANNEL "source_1";
mysql> START/STOP SLAVE FOR CHANNEL "source_2";

从库上有多个主库,可以使用start slave全部开启,也可以使用for channel 单独开启。关闭也是一样的

5.重置从库

RESET SLAVE;
RESET SLAVE FOR CHANNEL "source_1";

默认情况下可以使用reset slave全部重置,也可以使用for channel指定重置。对于基于GTID的复制,reset slave不会影响到之前执行的GTID,但是reset master会。
reset slave只是会重置复制的位置(position),清空relay log。不会清空例如hostname的连接信息,如果想要清空连接信息,可以使用reset slave all语句。

6.监控多主结构

1/使用performance schema库的表

mysql> SELECT * FROM replication_connection_status\G;
*************************** 1. row ***************************
CHANNEL_NAME: source_1
GROUP_NAME:
SOURCE_UUID: 046e41f8-a223-11e4-a975-0811960cc264
THREAD_ID: 24
SERVICE_STATE: ON
COUNT_RECEIVED_HEARTBEATS: 0
LAST_HEARTBEAT_TIMESTAMP: 0000-00-00 00:00:00
RECEIVED_TRANSACTION_SET: 046e41f8-a223-11e4-a975-0811960cc264:4-37
LAST_ERROR_NUMBER: 0
LAST_ERROR_MESSAGE:
LAST_ERROR_TIMESTAMP: 0000-00-00 00:00:00
*************************** 2. row ***************************
CHANNEL_NAME: source_2
GROUP_NAME:
SOURCE_UUID: 7475e474-a223-11e4-a978-0811960cc264
THREAD_ID: 26
SERVICE_STATE: ON
COUNT_RECEIVED_HEARTBEATS: 0
LAST_HEARTBEAT_TIMESTAMP: 0000-00-00 00:00:00
RECEIVED_TRANSACTION_SET: 7475e474-a223-11e4-a978-0811960cc264:4-6
LAST_ERROR_NUMBER: 0
LAST_ERROR_MESSAGE:
LAST_ERROR_TIMESTAMP: 0000-00-00 00:00:00
2 rows in set (0.00 sec)

2/使用show slave status for channel source_1;语句。