怎样处理MySQL主从切换后的脑裂问题并恢复数据同步

阿杰大大_7196

阿杰大大_7196

2026-10-01

626人浏览

原创

脑裂后须立即隔离原主库写入:在primary集群执行fencewrites(),原主库设super_read_only=on并持久化,校验gtid或位点一致后再重建复制,同时stop slave防止日志刷屏。

怎样处理mysql主从切换后的脑裂问题并恢复数据同步

主从切换后出现脑裂,本质是写入被分流到两个“主库”,必须立刻隔离原主库写入,否则数据会持续分裂、不可逆损坏。

为什么fenceWrites()执行失败?

常见报错:ERROR: Unable to fence Cluster from write traffic: operation not permitted on REPLICA Clusters。这不是权限问题,而是你正在一个REPLICA Cluster上执行fenceWrites()——该命令只允许在PRIMARY Cluster上调用。如果你误在从集群上运行,MySQL Shell 会直接拒绝。确认当前集群角色:运行cluster.status(),检查role字段是否为HA且primary指向本集群。若为REPLICA,需切换到新主集群的 MySQL Shell 连接中再执行。

如何真正阻断原主库的写入?

不能只依赖应用层切流量。原主库一旦未被强制只读,任何残留连接(如监控脚本、DBA手动登录、未重启的应用连接池)都可能写入新数据,导致后续无法对齐。必须双管齐下:

MySQL
MySQL

编写正确的MySQL查询,避免字符集、索引和锁方面的常见陷阱。

下载
  • 在原主库上立即执行:SET GLOBAL super_read_only = ON;(注意不是read_only,super_read_only可阻止SUPER权限用户写入)
  • 同步修改配置文件my.cnf,添加super_read_only = ON并重启,防止实例重启后恢复可写
  • 检查是否有活跃写连接:SELECT * FROM performance_schema.threads WHERE TYPE = 'FOREGROUND' AND PROCESSLIST_COMMAND IN ('Query', 'Execute') AND PROCESSLIST_INFO NOT LIKE '%SELECT%';,对非查询连接主动KILL

数据同步恢复前必须校验什么?

不要急着CHANGE MASTER TO重搭复制。先确认新主库和原主库之间是否存在已丢失但未察觉的事务:

  • 若启用GTID:在新主库执行SELECT @@GLOBAL.gtid_executed;,在原主库执行SELECT @@GLOBAL.gtid_purged;,二者必须完全相等;若有差值,说明原主库有未同步到新主库的事务,需人工提取binlog补入
  • 若未启用GTID:比对新主库的Exec_Master_Log_Pos与原主库的Position(来自SHOW MASTER STATUS),两者必须一致;不一致则用mysqlbinlog --start-position=... --stop-position=...提取缺失binlog并重放
  • 跳过Seconds_Behind_Master = 0的假象:并行复制下该值可能为0但仍有事务在relay log中未执行,务必检查Slave_SQL_Running_State是否为Slave has read all relay log; waiting for more updates

重建复制关系时最容易漏掉的一步

很多人在新主库上执行完CHANGE MASTER TO就认为完成了,却忘了关闭原主库上的复制线程。这会导致原主库仍尝试向已下线的旧主(或空地址)发起IO连接,日志刷屏error connecting to master,消耗资源且干扰排查。正确操作是:

  • 在原主库上执行:STOP SLAVE;(不是RESET SLAVE ALL,后者会清空复制元数据,影响后续回切)
  • 确认Slave_IO_Running和Slave_SQL_Running均为No
  • 如需保留反向复制能力(例如未来回切),可在新主库上配置指向原主库的复制关系,但务必确保原主库已super_read_only = ON且无写入

脑裂后的修复窗口极短,所有操作必须在写入停止后的5分钟内完成判断和执行。任何延迟都会扩大数据差异,使CHECKSUM TABLE或pt-table-checksum校验变得低效甚至失效。

相关文章

数据恢复工具app
数据恢复工具app

手机里的数据丢失了怎么办?聊天记录不小心删掉了怎么办?不用担心,这里为大家提供了数据恢复工具app下载,安全正规,有需要的小伙伴保存下载,就轻松恢复数据啦!

下载

相关标签:

mysql

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.20

2033

6

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.21

1259

5

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.18

735

5

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.19

2692

5

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.25

4448

4

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2023.08.08

1039

3

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.11

4711

4

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

2023.08.14

4222

7

mysql事务隔离级别
mysql事务隔离级别

mysql规范中定义了四种事务隔离级别,不同的隔离级别对事务的处理有所不同。本专题为大家提供mysql事务隔离级别相关的文章内容,大家可以免费体验。

2023.08.16

5474

11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 178人学习

使用phpenv集成环境安装极致CMS
使用phpenv集成环境安装极致CMS

共2课时 | 282人学习