MySQL 双主架构怎么解决数据冲突问题

酷明酱_7523

酷明酱_7523

2026-07-09

220人浏览

原创

mysql双主架构本身不解决数据冲突,仅靠auto_increment_offset和auto_increment_increment只能避免insert主键重复,无法防范update/delete并发覆盖、业务逻辑冲突及应用层写同一行;必须同步配置innodb_autoinc_lock_mode=0、log_slave_updates=on、server-id唯一且replicate-same-server-id=0,并配合写入分离、幂等操作与逻辑删除等应用层策略才能保障一致性。

mysql 双主架构怎么解决数据冲突问题

MySQL 双主架构本身不解决数据冲突,它只负责复制,冲突必须靠人为设计来规避。单纯调自增步长只能防 INSERT 主键重复,对 UPDATE、DELETE、业务逻辑覆盖完全无效。

自增 ID 冲突:必须配齐三组参数

仅设 auto_increment_offset 和 auto_increment_increment 不够,漏掉任一关键项都会在批量插入或延迟场景下翻车:

  • 主库 A 设 auto_increment_increment = 2、auto_increment_offset = 1 → 生成 1/3/5…
  • 主库 B 设 auto_increment_increment = 2、auto_increment_offset = 2 → 生成 2/4/6…
  • 两台都必须设 innodb_autoinc_lock_mode = 0(传统锁模式),否则 INSERT ... SELECT 会跳号、错号
  • 必须开启 log_slave_updates = ON,否则本机 binlog 不记录 relay 日志,双向复制断裂
  • server-id 必须全局唯一(如 A=1、B=2),且需配置 replicate-same-server-id = 0 防回环复制

UPDATE/DELETE 冲突:根本没法靠 ID 规避

就算 ID 完全错开,以下操作仍会静默导致数据错误:

  • UPDATE users SET balance = balance + 100 WHERE id = 123:两端并发执行,最终值只保留一次加法结果
  • DELETE FROM logs WHERE created_at :跨时区或延迟下,两边删的行集可能不一致
  • 无 WHERE 的 UPDATE t SET status='done' 或 DELETE FROM t:复制延迟时极易误操作全表

真正可行的做法是:禁止应用直连双主做自动负载均衡写入;所有变更走幂等逻辑,例如带版本号或时间戳条件更新:UPDATE t SET val=?, version=version+1 WHERE id=? AND version=?;物理删除统一转为 UPDATE ... SET is_deleted=1。

MySQL
MySQL

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

下载

写入控制策略比参数更重要

参数只是让复制不崩,而谁往哪写、什么时候写、怎么写,才决定数据是否一致:

  • 按业务拆分:用户表全走 A,订单表全走 B
  • 按数据特征路由:user_id % 2 == 0 写 A,否则写 B
  • 地域分流:国内流量写 A,海外写 B
  • 主动-被动模式:日常只用 A 写,B 仅备灾;故障时切流,避免常态双写

冲突发生后别指望自动修复

一旦数据分叉,pt-table-sync 这类工具只能在完全无写入的窗口期临时校正,且默认按“目标库覆盖源库”执行,可能丢数据。更务实的做法是:

  • 用 pt-table-checksum 定期巡检,早发现偏差
  • 关键表加 last_modified_time 字段,结合 binlog 解析识别异常时间跳跃
  • 监控 SHOW REPLICA STATUS\G 中的 SQL thread error 和 Seconds_Behind_Master 异常波动

双主不是高可用银弹,运维成本高、风险面广。若非强需求(如跨机房双活容灾),建议优先选用 MySQL Group Replication、TiDB 或 MHA 等原生支持一致性保障的方案。

相关文章

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

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

下载

相关标签:

mysql

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

相关专题

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

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

2023.08.15

437

5

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

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

2023.09.08

900

5

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

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

2023.09.19

2832

5

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

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

2023.10.09

956

5

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

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

2023.10.17

849

5

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

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

2023.10.17

434

3

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

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

2023.10.18

2556

4

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

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

2023.10.20

4752

4

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

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

2023.10.20

767

5

热门下载

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

精品课程

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

共1课时 | 183人学习