如何切换主从角色_mysql主从切换流程

发布时间 - 2026-01-11 00:00:00    点击率:
MySQL主从切换的核心是原从库升主、原主库降从,需确保数据一致性和服务连续性。切换前须确认从库已追平主库(Seconds_Behind_Master=0、位点或GTID一致);切换中在主库加读锁并记录binlog位置,再于从库执行STOP SLAVE、RESET SLAVE ALL、关闭read_only;切换后原主库需CHANGE MASTER TO新主库并验证复制状态及数据同步。

MySQL主从切换的核心是让原从库升为主库,原主库降为从库,整个过程需确保数据一致性、服务连续性,并避免脑裂。关键不在于命令本身,而是切换前的检查、切换中的顺序控制和切换后的验证。

确认从库已追平主库数据

这是切换的前提。若从库延迟较大,直接切换会导致数据丢失。

  • 在从库执行 SHOW SLAVE STATUS\G,检查 Seconds_Behind_Master 是否为 0;
  • 同时核对 Read_Master_Log_Pos 和主库的 Master_Log_File + Exec_Master_Log_Pos(可通过主库 SHOW MASTER STATUS 获取)是否一致;
  • 如有 GTID,确认 Retrieved_Gtid_Set 等于 Executed_Gtid_Set,且与主库的 gtid_executed 完全一致。

停止主库写入并确认无新事务

避免切换窗口期产生新数据,造成主从不一致。

  • 在主库执行 FLUSH TABLES WITH READ LOCK;(注意:该操作会阻塞写,需快速操作);
  • 再执行一次 SHOW MASTER STATUS; 记录当前 binlog 文件名与位置(或 GTID set),后续从库将以此为起点同步;
  • 保持连接不退出,锁未释放前不要断开——这是保证位置精确的关键。

提升从库为主库并重置复制关系

从库“转正”后,需关闭 SQL 线程、清除旧主信息,并开放写权限。

  • 在原从库执行:
    STOP SLAVE;
    RESET SLAVE ALL;(清空 relay log 和 master info);
    SET GLOBAL read_only = OFF;(如已启用 read_only,需关闭);
  • 此时该库已成为新主库,应用可指向它继续读写;
  • 原主库重启复制时,需用 CHANGE MASTER TO 指向新主库,并指定新主库当前的 binlog 位置或 GTID。

恢复原主库为从库并验证同步

原主库角色转换后,必须重新建立复制链路,并持续观察。

  • 在原主库执行:
    STOP SLAVE;
    CHANGE MASTER TO MASTER_HOST='新主库IP', MASTER_USER='repl', ...(填入新主库信息及刚才记录的 binlog 位置或 MASTER_AUTO_POSITION=1);
    START SLAVE;
  • 立即检查 SHOW SLAVE STATUS\G,确认 Slave_IO_RunningSlave_SQL_Running 均为 Yes;
  • 插入一条测试数据到新主库,确认能否在原主库(现从库)中及时查到。

整个流程不复杂但容易忽略细节,尤其锁表时机、GTID一致性校验和复制参数重配。自动化工具(如 MHA、Orchestrator)可大幅降低人工误操作风险,但理解底层逻辑仍是安全切换的基础。


# mysql  # 工具  # 数据丢失  # sql  # 线程  # 自动化  # 这是  # 追平  # 如有  # 均为  # 仍是  # 将以  # 可通过  # 重启  # 无新  # 此为 


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


相关推荐: Laravel如何实现数据库事务?(DB Facade示例)  如何在阿里云购买域名并搭建网站?  Laravel如何生成URL和重定向?(路由助手函数)  UC浏览器如何设置启动页 UC浏览器启动页设置方法  Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  lovemo网页版地址 lovemo官网手机登录  Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制  Laravel怎么调用外部API_Laravel Http Client客户端使用  如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  利用python获取某年中每个月的第一天和最后一天  如何将凡科建站内容保存为本地文件?  浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】  如何在阿里云部署织梦网站?  Python正则表达式进阶教程_复杂匹配与分组替换解析  在Oracle关闭情况下如何修改spfile的参数  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  iOS中将个别页面强制横屏其他页面竖屏  javascript读取文本节点方法小结  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  bootstrap日历插件datetimepicker使用方法  打开php文件提示内存不足_怎么调整php内存限制【解决方案】  图册素材网站设计制作软件,图册的导出方式有几种?  Laravel中的withCount方法怎么高效统计关联模型数量  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作  如何在阿里云高效完成企业建站全流程?  EditPlus中的正则表达式 实战(1)  Thinkphp 中 distinct 的用法解析  Bootstrap整体框架之JavaScript插件架构  Laravel DB事务怎么使用_Laravel数据库事务回滚操作  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  Laravel如何使用Eloquent进行子查询  软银砸40亿美元收购DigitalBridge 强化AI资料中心布局  Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程  Laravel如何实现API速率限制?(Rate Limiting教程)  公司网站制作价格怎么算,公司办个官网需要多少钱?  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  如何快速搭建高效可靠的建站解决方案?  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  php结合redis实现高并发下的抢购、秒杀功能的实例  如何快速上传自定义模板至建站之星?  海南网站制作公司有哪些,海口网是哪家的?  Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】  如何挑选高效建站主机与优质域名?  Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境  百度浏览器如何管理插件 百度浏览器插件管理方法  laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法  JavaScript如何实现继承_有哪些常用方法