MySQL主从切换实战流程指南
mysql主从切换流程

首页 2025-07-13 00:41:13



MySQL主从切换流程详解 在现代数据库架构中,MySQL主从复制是提高数据可用性和负载均衡的重要手段

    然而,在主从架构中,主库可能会因为各种原因需要切换,无论是计划性的维护还是突发性的故障

    掌握正确的主从切换流程至关重要,以确保数据的一致性、完整性以及业务连续性

    本文将详细阐述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日期计算头疼?这份加一天操作指南能解决90%问题
MySQL日志到底在哪里?Linux/Windows/macOS全平台查找方法在此
MySQL数据库管理工具全景评测:从Workbench到DBeaver的技术选型指南
MySQL密码忘了怎么办?这份重置指南能救急,Windows/Linux/Mac都适用
你的MySQL为什么经常卡死?可能是锁表在作怪!快速排查方法在此
MySQL单表卡爆怎么办?从策略到实战,一文掌握「分表」救命技巧
清空MySQL数据表千万别用错!DELETE和TRUNCATE这个区别可能导致重大事故
你的MySQL中文排序一团糟?记住这几点,轻松实现准确拼音排序!
别再混淆Hive和MySQL了!读懂它们的天壤之别,才算摸到大数据的门道