MySQL 双主同步怎么防止数据循环写入

舞姬之光

舞姬之光

2026-07-10

290人浏览

原创

核心是让节点准确识别“数据是否自己发出又被回传”,必须开启log_slave_updates且server-id全局唯一;gtid模式通过gtid_executed集合自动去重,比server-id过滤更可靠,可避免静默丢事件或无限循环。

mysql 双主同步怎么防止数据循环写入

MySQL 双主同步防止数据循环写入,核心不是“堵住某条路”,而是让每个节点能准确识别“这条数据是不是我自己发出去又被对方打回来的”。只要识别机制失效,循环就必然发生——而且是静默丢事件或无限重放,不报错、难排查。

必须开启 log_slave_updates 且双方固化

这是双向同步的物理前提。A 同步完 B 的变更后,必须把这次变更再记进自己的 binlog,B 才能回传;否则链路直接断开,根本构不成“循环”,只是单向失效。

  • 参数必须写在 my.cnf(或 my.ini)中,设为 log_slave_updates = ON,然后重启 MySQL;运行时 SET GLOBAL 在多数生产版本中无效
  • 不能只在 A 开、B 关,也不能认为“B 是从库才需要开,A 是主库不用开”——双主下没有纯主库,只有互为从库的节点
  • 开启后 binlog 写入量翻倍,需检查 max_binlog_size、sync_binlog 和磁盘 I/O 承载能力

server_id 全局唯一且严格验证

这是防循环最底层、不可绕过的过滤开关。I/O 线程在写 relay log 前,会比对 event 携带的 server_id 和本机 @@server_id:相同就直接丢弃,不进 relay log,SQL 线程根本看不到它。

MySQL(Linux)
MySQL(Linux)

MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。

下载
  • A 设 server-id = 101,B 设 server-id = 102(避免用 0 或 1,防自动化脚本冲突)
  • 修改配置后必须重启,并执行 SELECT @@server_id; 确认值与配置文件一致
  • 检查所有参与复制的节点(包括未来可能加的从库),确保无重复;重复即等同于主动打开循环大门

优先启用 GTID 实现自动去重

GTID 比 server_id 过滤更鲁棒。每个事务自带唯一 ID(source_id:transaction_id),节点执行前查 gtid_executed 集合,已存在就跳过——不依赖位置、不惧跨库、无需人工维护规则。

  • 两端都配:gtid_mode = ON + enforce_gtid_consistency = ON
  • 初始化时用 CHANGE MASTER TO ... AUTO_POSITION = 1,位点由 GTID 自动对齐
  • 禁用 replicate-ignore-db 等库级过滤,GTID 下它们既不可靠又不必要

auto_increment 必须错开避免主键冲突

循环写入常以主键冲突(ERROR 1062)暴露,根源是两边 INSERT 都生成相同 ID。这不是复制问题,但会中断 SQL 线程,放大循环风险。

  • A 配:auto_increment_offset = 1auto_increment_increment = 2 → 生成 1,3,5…
  • B 配:auto_increment_offset = 2auto_increment_increment = 2 → 生成 2,4,6…
  • 两个参数都要写进配置文件并重启;increment 建议固定为 2,避免 offset 超出范围导致重叠

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

mysql

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

相关专题

更多
服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.15

335

5

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.08

616

5

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2023.09.19

1192

5

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

428

5

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.17

324

5

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

2023.10.17

190

3

如何开启TFTP服务器
如何开启TFTP服务器

开启TFTP服务器的步骤包括选择TFTP服务器软件、下载和安装软件、配置TFTP服务器以及启动和测试服务器等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

1008

4

服务器负载不兼容怎么解决
服务器负载不兼容怎么解决

解决方法:1、增加服务器资源;2、负载均衡;3、优化应用程序;4、增加缓存机制;5、分布式架构;6、限流和熔断;7、自动化扩容。想知道更详细服务器负载不兼容的解决方法,可以访问本专题下面的文章。

2023.10.20

1800

4

宽带如何接入服务器
宽带如何接入服务器

宽带接入服务器的方法有ADSL宽带接入服务器、光纤接入服务器、无线接入服务器和以太网接入服务器等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.20

321

5

热门下载

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

精品课程

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

共1课时 | 122人学习

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

共2课时 | 221人学习

phpEnv手册
phpEnv手册

共0课时 | 0人学习