1.主从切换
因为数据库迁移、升级、主库停机维护等原因,需要将从库升为主,主要步骤如下:
1).主库
锁库,禁止写入
mysql> flush table with read lock;
确认Executed_Gtid_Set不再变化,并记录
mysql> show master status\G
*************************** 1. row ***************************
File: mysql-bin.000008
Position: 911270242
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set: 46fd58fe-f74a-11e7-a4ba-005056b75d21:1-19772125
2).从库
确认主从Executed_Gtid_Set的最后事务一致
mysql> show slave status\G
Executed_Gtid_Set: 46fd58fe-f74a-11e7-a4ba-005056b75d21:3118-19772125
3).主库
关闭mysql
4).从库
mysql> stop slave;
mysql> reset slave all;
mysql> reset master;
修改参数/etc/my.cnf
event_scheduler=1
read_only=0
启动从库
5).浮动IP
主:
ip addr del ${VIP}/24 dev ${DEV}
从:
ip addr add ${VIP}/24 dev ${DEV}
# 发送广播更新二层网络vip与mac对应关系
arping -I ${DEV} -c 1 ${VIP}
# 更新网关服务器上vip与mac对应关系缓存
arping -I ${DEV} -c 1 -s ${VIP} ${GATEWAY}
6).主库启动后,如果想变成从库,启动前必须修改参数再change master
event_scheduler=0
read_only=1
2.从库换主
一主多从的环境下,主切换到一个从后,其他从需要重新指向新的主
stop slave;
show slave status;
记录(一定要确保记录好)
Retrieved_Gtid_Set: 1a875f74-3be9-11e8-a430-0050568b4912:1528798611-1530719123
Executed_Gtid_Set: 1a875f74-3be9-11e8-a430-0050568b4912:1-1530719123,34e4af8d-ebc0-11e7-997b-0050568b382d:1-1566707
reset slave;
reset master;
将gtid_purged设置为Executed_Gtid_Set
某些情况下,Executed_Gtid_Set的gtid从n开始(n>1),gtid_purged需要调整为从1开始,避免该节点会从主节点寻找以前不需要、且已经被purge的binlog
set global gtid_purged='1a875f74-3be9-11e8-a430-0050568b4912:1-1530719123,34e4af8d-ebc0-11e7-997b-0050568b382d:1-1566707';
change master to master_host='new_master_ip',master_port=3306,master_user='username',master_password='password',master_auto_position=1;