异常切换
- 主从复制已建立。
- 客户端应用正常操作(客户端对主库进行操作)。
- 模拟主库异常(3种情况,选择1种执行)。
- 查看从库状态。
1
show slave status\G;
确认从库不再接收主库的binlog信息后,停止客户端应用(为了保证业务数据的完整性,停止客户端对主库的操作)。
如果有下面3种情况中的1种,则说明从库不再接收主库的binlog信息。
- Slave_IO_Running为No。
- Last_IO_Error有报错信息。
- Retrieved_Gtid_Set(或Read_Master_Log_Pos)保持不变。
- 确认所有从库同步完成,参考2。
- 选举新主库。
- 登录从库。
1
/usr/local/mysql/bin/mysql -uroot -p123456 -S /data/mysql/run/mysql.sock
- 查看所有从库的状态。
1
show slave status\G;
比较Exec_Master_Log_Pos值(传统方式)或者Executed_Gtid_Set值(GTID方式),值最大的从库选举为新主库(如果值相等则选择其中1个作为新主库)。
- 选举的从库,执行下面命令手动升级为新主库(MySQL数据库自身不提供自动切换,自动切换可以通过第三方软件实现例如MHA)。
1 2 3
stop slave; reset slave all; show slave status \G;
查看主库状态,记录File参数值(binlog日志文件)和Position参数值(binlog中最新操作的位置),7.e会用到这2个参数值。
1
show master status;
通过查看主从复制确认从库的配置(部署方式、同步方式和是否开启并行),然后参考部署MySQL主从复制中对应的“配置主库”章节配置新主库。
如果主库想重置File(binlog日志文件)和Position(binlog中最新操作的位置),则执行:
1 2
reset master; show master status;
- 确认新主库的log_bin值为ON。
1
show variables like 'log_bin';
若log_bin值为OFF,执行下面的操作:
- 打开配置文件。
1
vim /etc/my.cnf
- 按“i”进入编辑模式,修改以下内容。
[mysqld] log-bin=mysql-bin
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 重启MySQL服务,如果成功则没问题。
1
service mysql restart
或者
1 2
/usr/local/mysql/bin/mysqladmin -uroot -p123456 shutdown -S /data/mysql/run/mysql.sock /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf &
- 打开配置文件。
- 登录从库。
- 其它从库指向新主库。
- 登录从库。
1
/usr/local/mysql/bin/mysql -uroot -p123456 -S /data/mysql/run/mysql.sock
- 确认从库上的relay log回放状态。
1
show slave status \G;
Slave_SQL_Running_State显示:"Slave has read all relay log;waiting for more updates",回放成功。
- 停止从库。
1
stop slave;
删除从库的所有信息,查看从库状态。
1 2
reset slave all; show slave status \G;
- 配置同步方式,参考4。
- 从库指向新主库(根据4的同步方式选择)。
- 传统方式(master_log_file和master_log_pos是6.c前面新主库查询到的,根据实际情况修改):
1
change master to master_host='192.168.220.72',master_port=3306,master_user='replicate',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=155;
- GTID方式:
1
change master to master_host='192.168.220.72',master_port=3306,master_user='replicate',master_password='123456',master_auto_position=1;
- 传统方式(master_log_file和master_log_pos是6.c前面新主库查询到的,根据实际情况修改):
- 启动从库。
1
start slave;
- 查看从库状态。
1
show slave status \G;
下面两项值均为Yes,即表示设置从库成功。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
- 登录从库。
- 确认所有从库同步完成,参考2。校验主从数据一致性(参考工具运行)。
- 恢复旧主库,旧主库指向新主库。
- 主库宕机恢复。
1 2
ps -ef | grep mysql /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &
- 主库断网恢复。
1 2 3
ip a ifup enp5s0 ip a
- 主库磁盘故障恢复。
如果是磁盘损坏,导致的主库不可用,建议使用物理备份(例如XtraBackup)或者逻辑备份(mysqldump)对数据进行恢复。
通过查看主从复制确认从库的配置(部署方式、同步方式和是否开启并行复制),然后参考部署MySQL主从复制中对应的“配置从库”章节配置旧主库。
- 主库宕机恢复。
- 确认旧主库作为从库加入后同步完成(参考2)。
- 获取主库状态值,参考3。
- 获取从库状态值,参考4。
- 对比前面获取的主库状态值和从库状态值,确认从库是否完成所有relay log的回放,参考5。
父主题: 主从切换