mysql主从复制如何切换主库_mysql主从切换流程

发布时间 - 2025-12-26 00:00:00    点击率:
主库切换需确保从库同步完成:Seconds_Behind_Master=0且复制线程正常;原主库加读锁并记录binlog位点;目标从库停复制、重置配置、关闭read_only;其余从库重新CHANGE MASTER TO新主;最后解锁、验证同步与写入、更新路由。

确认从库已同步完成

切换前必须确保从库的复制已追上主库,否则会丢失数据。执行 SHOW SLAVE STATUS\G,重点检查以下两项:

  • Seconds_Behind_Master = 0:表示从库没有延迟
  • Slave_IO_Running 和 Slave_SQL_Running 都为 Yes:说明复制线程正常运行

若存在延迟,可等待同步完成,或在业务低峰期操作;必要时用 SELECT MASTER_POS_WAIT() 等待指定 binlog 位置。

停止原主库写入并刷新读写状态

为避免切主过程中产生新数据,需临时阻断原主库的写操作:

  • 在原主库执行 FLUSH TABLES WITH READ LOCK;(全局只读锁)
  • 再执行 SHOW MASTER STATUS; 记下当前 binlog 文件名和 position,后续从库需基于此点恢复
  • 保持连接不退出,防止锁自动释放

此时应用应停止向原主库写入,可配合服务层配置或代理(如 ProxySQL、HAProxy)将流量切至只读模式。

提升从库为新主库

在目标从库上执行以下步骤:

  • 停止复制:STOP SLAVE;
  • 重置复制信息(清除旧主配置):RESET SLAVE ALL;
  • 开启写能力(如有 read_only=ON,需关闭):SET GLOBAL read_only = OFF;
  • 确认无误后,该库即可作为新主库接受写请求

注意:若使用 GTID 复制,还需记录 SELECT @@GLOBAL.GTID_EXECUTED;,供后续其他从库重新指向新主时使用。

重新配置其他从库指向新主

原集群中其余从库需重新指向新的主库:

  • 在每个从库上先执行 STOP SLAVE;
  • 使用 CHANGE MASTER TO 指向新主库 IP、端口、账号密码,并指定正确的 binlog 文件与 position(或 GTID)
  • 启动复制:START SLAVE;,再用 SHOW SLAVE STATUS\G 验证

若原主库后续要转为从库,也按同样方式配置它指向新主库即可。

清理与验证

切换完成后需做几项收尾工作:

  • 在原主库执行 UNLOCK TABLES; 解除读锁
  • 检查新主库的写入是否正常(如插入测试数据、查 binlog 是否更新)
  • 验证各从库同步状态、延迟、错误日志(Last_IO_ErrnoLast_SQL_Errno
  • 更新应用配置、DNS、中间件路由规则等,确保后续流量正确打到新主库

整个过程建议在维护窗口内操作,并提前做好回滚预案(如保留原主库 binlog、备份关键位点)。


# mysql  # 端口  # ai  # proxy  # 路由  # dns  # 中间件  # select  # 线程  # position  # 位点  # 如有  # 再用  # 追上  # 两项  # 都为  # 则会  # 还需  # 时用  # 正常运行 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤  HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】  如何用搬瓦工VPS快速搭建个人网站?  JavaScript中的标签模板是什么_它如何扩展字符串功能  Laravel中间件如何使用_Laravel自定义中间件实现权限控制  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】  Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理  微信小程序 配置文件详细介绍  Laravel如何发送系统通知?(Notification渠道示例)  轻松掌握MySQL函数中的last_insert_id()  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  企业网站制作这些问题要关注  Laravel如何处理文件下载请求?(Response示例)  Laravel怎么调用外部API_Laravel Http Client客户端使用  Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】  Laravel如何保护应用免受CSRF攻击?(原理和示例)  Android中AutoCompleteTextView自动提示  浅谈javascript alert和confirm的美化  如何快速配置高效服务器建站软件?  Laravel如何配置Horizon来管理队列?(安装和使用)  Python文件操作最佳实践_稳定性说明【指导】  微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】  HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】  javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】  如何在 React 中条件性地遍历数组并渲染元素  Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置  如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道  Python进程池调度策略_任务分发说明【指导】  Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】  详解阿里云nginx服务器多站点的配置  JavaScript如何实现类型判断_typeof和instanceof有什么区别  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案  Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能  如何在Windows环境下新建FTP站点并设置权限?  EditPlus中的正则表达式实战(6)  html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】  如何使用 jQuery 正确渲染 Instagram 风格的标签列表  青岛网站建设如何选择本地服务器?  Python正则表达式进阶教程_复杂匹配与分组替换解析  如何快速搭建高效香港服务器网站?  太平洋网站制作公司,网络用语太平洋是什么意思?  jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】  Laravel如何实现文件上传和存储?(本地与S3配置)  浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案