
然而,在主从架构中,主库可能会因为各种原因需要切换,无论是计划性的维护还是突发性的故障
掌握正确的主从切换流程至关重要,以确保数据的一致性、完整性以及业务连续性
本文将详细阐述MySQL主从切换的流程,并针对不同场景给出具体步骤
一、MySQL主从切换概述 MySQL主从复制是一种数据同步机制,其中主库负责处理事务和数据更新,而从库则实时或异步地复制主库的数据
这种架构不仅提高了数据的可用性,还允许在从库上执行读操作,从而减轻主库的负载
当主库出现故障或需要维护时,可以通过切换流程将从库提升为主库,以保证业务的连续性
二、主从切换的场景 主从切换主要发生在以下两种场景: 1.主备正常切换:在主备同步复制正常的情况下进行的主备切换,通常用于灾备演练或计划性的主备切换
2.主库宕机切换:在主库异常宕机的情况下,将从库切换为主库,以恢复数据库服务
这种情况通常发生在异步模式或非强一致半同步下,可能存在数据没有完全同步到从库的情况
三、主从切换前的准备工作 在进行主从切换之前,需要做好以下准备工作: 1.确认MySQL版本:确保主从库的MySQL版本兼容,以避免因版本差异导致的问题
2.检查复制状态:使用`SHOW SLAVE STATUS G`命令检查从库的复制状态,确保IO线程和SQL线程都在运行,且延迟较小
3.备份数据:在进行主从切换之前,对主库和从库的数据进行备份,以防止数据丢失
4.断开应用连接:在切换前,需要确保所有连接到原主库的应用已经断开连接,以避免在切换过程中发生数据写入操作导致数据不一致
可以通过设置主库为只读模式来间接实现这一点
四、主备正常切换流程 以下是在主备同步复制正常的情况下进行的主备切换流程: 1.切断应用对主库的流量: - 通过负载均衡器或应用配置,将流量切换到从库或从库的只读副本上
确认所有连接到原主库的应用已经断开连接
2.主库设置只读: 执行以下SQL命令将主库设置为只读模式: sql SET GLOBAL read_only = ON; SET GLOBAL super_read_only = ON; - 这将阻止新的写入操作,但不会影响已连接的会话
为了强制断开连接,可以通过数据库命令行手动断开所有连接到主库的会话
3.查看备库复制进程状态: - 在从库上执行SHOW SLAVE STATUS G命令,检查复制进程的状态
- 确认Slave_IO_Running和`Slave_SQL_Running`状态为`YES`,且`Seconds_Behind_Master`为0
4.比对主备两边的GTID是否一致: - GTID(Global Transaction Identifier)是MySQL5.6及以上版本引入的一种全局唯一的事务标识符
- 在主库和从库上执行以下SQL命令获取`executed_gtid`集合: sql SELECT @@global.gtid_executed; - 使用GTID_SUBSET函数比对主备两边的GTID是否一致
5.从库停掉复制进程并清空主从信息: 在从库上执行以下SQL命令停止复制进程并清空主从信息: sql STOP SLAVE; RESET SLAVE ALL; 6.从库关闭只读开启读写,转为新主库: 执行以下SQL命令将从库设置为读写模式: sql SET GLOBAL read_only = OFF; SET GLOBAL super_read_only = OFF; 此时,从库已经转变为新的主库
7.主库设置执行新主库的复制链路,转为新备库: - 在原主库上执行以下SQL命令设置复制链路,指向新的主库: sql CHANGE MASTER TO MASTER_HOST=新主库IP, MASTER_USER=复制用户, MASTER_PASSWORD=复制密码, MASTER_PORT=3306, MASTER_AUTO_POSITION=1; START SLAVE; 此时,原主库已经转变为新的从库
8.应用流量切向新主库: 通过负载均衡器或应用配置,将流量切换到新的主库上
确认应用能够正常访问新的主库
五、主库宕机切换流程 在主库宕机的情况下,将从库切换为主库的流程如下: 1.确认主库状态: 检查主库是否无法访问或无法启动
如果主库可以访问但无法写入,可以尝试重启主库服务
2.选择从库作为新主库: 选择一个数据同步较为完整且延迟较小的从库作为新的主库
确保该从库已经执行了relay log中的全部更新
3.在从库上停止复制进程并重置: 在选定的从库上执行以下SQL命令停止复制进程并重置: sql STOP SLAVE; RESET MASTER; -- 注意:此命令会删除所有binlog日志,确保已经备份 - 如果从库没有启用binlog日志,需要先修改配置文件启用binlog,然后重启数据库服务
4.将从库设置为读写模式: 执行以下SQL命令将从库设置为读写模式: sql SET GLOBAL read_only = OFF; SET GLOBAL super_read_only = OFF; 5.配置其他从库指向新主库: - 在其他从库上执行以下SQL命令设置复制链路,指向新的主库: sql CHANGE MASTER TO MASTER_HOST=新主库IP, MASTER_USER=复制用户, MASTER_PASSWORD=复制密码, MASTER_PORT=3306, MASTER_LOG_FILE=新主库的binlog文件名, MASTER_LOG_POS=新主库的binlog位置; START SLAVE; 6.验证新主库状态: 确保新主库能够正常处理事务和写入操作
- 检查其他从库的复制状态,确保它们能够正常同步新主库的数据
7.处理数据不一致问题: - 如果在主库宕机前存在未同步的事务,需要在新主库上手动处理这些事务,以确保数据的一致性
- 可以使用binlog日志或第三方工具来分析和恢复未同步的数据
六、切换后的验证与监控 在主从切换完成后,需要进行以下验证和监控工作: 1.验证VIP(虚拟IP): 在主从切换后,需要确保VIP已经正确切换到新的主库上
使用ip a等命令检查VIP的状态
2.验证只读属性: - 如果在切换前将原主库设置为只读模式,那么在切换后需要验证新主库是否具有读写权限
- 使用`SHOW VARIABLES LIKE %READ_ONLY%`命令检查只读属性
3.验证账号访问权限: - 切换后,需要验证用于连接数据库的账号的访问权限是否正确
- 使用MySQL客户端连接数据库并尝试执行一些基本的读写操作来验证权限
4.检查复制状态: 在主从切换后,需要使用命令行检查原复制进程是否在运行
- 使用SHOW SLAVE STATUS G命令检查从库的复制状态
5.配置数据库监控工具: - 在切换后,需要配置好数据库监控工具,能够实时监控数据库的性能和状态
- 使用Prometheus、Grafana等监控工具来监控数据库的负载、延迟等指标
6.备份恢复任务的调整: - 在进行主从切换之后,为了不影响生产业务,需要确保备份任务不在新主库上执行
- 调整备份策略,确保备份任务能够顺利执行且不会对数据库性能造成太大影响
七、结论 MySQL主从切换是一个复杂而关键的过程,需要严谨把控各个技术点以确保数据的一致性和业务的连续性
本文详细阐述了主从切换的流程,包括准备工作、主备正常切换流程、主库宕机切换流程以及切换后的验证与监控工作
掌握这些流程和技术点,将有助于提高MySQL数据库的高可用性和稳定性
在实际操作中,需要根据具体场景和需求进行调整和优化,以确保切换过程的顺利进行
掌握技巧:轻松查看MySQL数据库日志
MySQL:高效删除多个对象IN语句技巧
MySQL主从切换实战流程指南
MySQL面试必备:常考高频题解析
绿色版MySQL安装全攻略:注意事项与步骤详解
浏览器显示MySQL原因揭秘
MySQL修改表字符集指南
掌握技巧:轻松查看MySQL数据库日志
MySQL:高效删除多个对象IN语句技巧
MySQL面试必备:常考高频题解析
绿色版MySQL安装全攻略:注意事项与步骤详解
浏览器显示MySQL原因揭秘
MySQL修改表字符集指南
MySQL技巧:统计字段重复数据秘籍
MySQL集联删除操作指南
MySQL命令行高效导出数据库指南
服务器开发者指南:从零开始学MySQL数据库管理
免费商用云MySQL,高效数据库新选择
MySQL乱码问题,一招解决!