首页 游戏 软件 资讯 排行榜 专题
首页
数据库
MySQL主从同步如何实现一对多架构_配置一个主库多个从库

MySQL主从同步如何实现一对多架构_配置一个主库多个从库

热心网友
11
转载
2026-04-26

主库需开启binlog并设唯一server-id:配置server-id=1、log-bin=/var/lib/mysql/mysql-bin、binlog-format=ROW、expire_logs_days=7;从库通过CHANGE REPLICATION SOURCE TO独立连接主库,依赖各自relay_log和master.info互不干扰;延迟判断应比对File/Position或GTID集合,而非仅看Seconds_Behind_Master。

MySQL主从同步如何实现一对多架构_配置一个主库多个从库

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈

主库怎么配:开启 binlog 并设唯一 server-id

想让从库有数据可同步,主库的二进制日志(binlog)是必须开启的。这里有个关键选择:binlog_format 通常推荐设置为 ROW 模式。为什么?因为语句级复制(Statement-Based)在遇到某些函数、临时表或不确定性的操作时,很容易导致主从数据不一致,而 ROW 模式基于行的变化,可靠性要高得多。另一个绝对不能忽视的配置是 server-id,它必须是一个全局唯一的非零整数。那么,多个从库能不能共用同一个 server-id 呢?答案是绝对不行。主库和每一个从库都必须拥有自己唯一的身份标识,否则,无论是传统的基于位点的复制,还是 GTID 复制,都会直接拒绝连接。

关键的配置项需要写入主库的 my.cnf 文件:

server-id = 1
log-bin = /var/lib/mysql/mysql-bin
binlog-format = ROW
expire_logs_days = 7
  • 路径要绝对log-bin 的路径务必使用绝对路径(例如 /var/lib/mysql/mysql-bin)。使用相对路径可能在 MySQL 服务重启后导致问题。
  • 重启与在线变更:修改配置文件后,通常需要重启 MySQL 服务才能生效。虽然 binlog_format 可以动态调整(SET GLOBAL binlog_format = 'ROW'),但这个设置只对新建立的会话有效。为了确保环境一致,生产上还是建议重启服务。
  • 别忘了清理expire_logs_days 这个参数至关重要,它用于设置 binlog 文件的过期天数,自动清理历史日志。如果漏配,binlog 文件会无限增长,最终撑满磁盘空间。

从库怎么连:CHANGE REPLICATION SOURCE TO 指向同一主库

配置从库时,每个从库都需要独立执行 CHANGE REPLICATION SOURCE TO 命令(这是 MySQL 8.0.23 及之后版本的语法,旧版本使用 CHANGE MASTER TO),将复制源指向同一个主库的 IP 地址和端口。它们可以使用同一个复制账号,也可以分别创建,只要权限足够即可。这里的关键点不在于“能不能连接”,而在于“连接后如何互不干扰”。答案在于架构设计:每个从库都会独立维护自己的 relay_log(中继日志)文件和 master.info(复制元数据信息,在 MySQL 8.0 中部分信息移至性能模式表),彼此完全隔离,不会相互影响。

  • 主库准备账号:首先在主库上创建一个拥有 REPLICATION SLA VE 权限的用户。例如:CREATE USER 'repl'@'%' IDENTIFIED BY 'your_password'; GRANT REPLICATION SLA VE ON *.* TO 'repl'@'%';
  • 获取同步起点:从库执行命令时,SOURCE_LOG_FILESOURCE_LOG_POS 这两个参数必须与主库当前的 binlog 状态(通过 SHOW MASTER STATUS 查看)严格一致。一个省事的技巧是,使用 mysqldump --single-transaction --master-data=2 进行数据备份时,导出的 SQL 文件头部会自动包含正确的文件名和位置信息。
  • 独立启动:配置完成后,在每个从库上分别执行 START REPLICA;(8.0.23+)或 START SLA VE;(旧版)即可启动复制进程。多个从库的启动和运行都是完全独立的。

复制延迟怎么看:别只盯 Seconds_Behind_Master

很多运维同学习惯性地盯着 Seconds_Behind_Master 这个指标,但它其实是个“表象指标”,甚至可能产生误导。当它显示为 NULL0 时,并不代表从库已经100%追上了主库。这个值仅仅度量了从库 SQL 线程正在执行的 binlog 事件与主库当前事件之间的时间差,而忽略了网络传输耗时、relay log 写入磁盘的 I/O 延迟,以及从库自身负载过高导致 SQL 线程被阻塞等情况。

  • 可靠的比对方法:要准确判断是否“追平”,应该对比主库的 SHOW MASTER STATUS 输出的 FilePosition,与从库 SHOW REPLICA STATUS 输出的 Relay_Master_Log_FileExec_Master_Log_Pos 是否一致。
  • GTID 模式更精准:如果主从复制启用了 GTID 模式,那么判断延迟就更加可靠了。直接对比 Retrieved_Gtid_Set(从库已接收的 GTID 集合)和 Executed_Gtid_Set(从库已执行的 GTID 集合)是否相等即可。
  • 一对多的优势:这里也体现了一对多架构的一个核心优势:一个从库出现延迟,不会影响到其他从库的同步进度。当然,这个前提是主库的 I/O 能力和网络带宽足以支撑同时向多个从库发送 binlog 数据流(每个从库连接都会在主库上创建一个 dump 线程)。

常见翻车点:主库负载突增、从库 auto-increment 冲突、跨版本兼容性

一对多架构看似配置简单,但在生产环境中,往往在以下几个地方悄无声息地出现问题:

  • 主库资源瓶颈:如果主库没有做读写分离,所有业务写入压力集中于此,同时多个从库又在高频率地拉取 binlog。这会导致 binlog 写入和多个 dump thread 的读取操作并发进行,极易打满主库的磁盘 I/O 或网络出口带宽。表现就是主库的写操作响应变慢,部分网络连接不稳定的从库可能会报出 ERROR 2013 (HY000): Lost connection to MySQL server during query 这类连接丢失的错误。
  • 自增主键陷阱:从库上需要配置 auto_increment_incrementauto_increment_offset 吗?答案是:千万不要在一对多场景下开启。这两个参数是为多主环形复制架构设计的,用于避免自增 ID 冲突。在标准的主从复制中,从库必须保持 auto_increment_increment = 1,否则在应用写入时(例如在从库上执行写操作测试),可能导致自增主键冲突或出现不连续的跳号。
  • 版本兼容性暗坑:跨大版本的复制需要格外小心。通常,MySQL 5.7 作为主库,8.0 作为从库可以同步,但反过来(8.0 主,5.7 从)则可能不行。尤其是在 GTID 模式下,主从服务器的 gtid_mode 设置必须完全兼容,不同版本之间对 GTID 事件的处理可能有差异,例如 5.7 版本的从库可能无法正确解析 8.0 主库生成的某些特定 GTID 事件。

最后必须强调一点:一对多复制解决了数据分发和读扩展的问题,但它并没有解决主库的单点故障问题。主库一旦宕机,整个复制链路就中断了。实现高可用,仍然需要依靠外部的监控和切换工具(如 MHA、Orchestrator 等),或者在应用层设计灵活的路由逻辑。很多人配置完主从就以为高枕无忧了,其实,这只是构建高可用数据库体系的第一步。

来源:https://www.php.cn/faq/2310074.html
免责声明: 游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关攻略

mysql通过LDAP集成MySQL用户权限_MySQL身份验证插件使用
数据库
mysql通过LDAP集成MySQL用户权限_MySQL身份验证插件使用

MySQL 8 0+ 通过 LDAP 集成用户权限:告别密码,拥抱集中认证 如何实现MySQL数据库用户与公司LDAP AD目录服务的无缝集成与统一认证?这听起来技术门槛很高,实际配置过程中也确实会遇到不少挑战。其核心关键在于:必须使用MySQL 8 0 28或更高版本,并连接启用了TLS加密的Op

热心网友
04.26
mysql中如何用函数将十六进制转为十进制_使用CONV函数进行进制转换
数据库
mysql中如何用函数将十六进制转为十进制_使用CONV函数进行进制转换

CONV:MySQL中十六进制转十进制的首选函数 在MySQL数据库操作中,将十六进制数值转换为十进制是一项常见需求。此时,CONV函数无疑是最高效、最标准的内置解决方案。它专为进制转换设计,语法简洁,虽然不自动识别0x前缀,但只要传入纯十六进制字符串,即可准确完成计算,且对字母大小写不敏感。 CO

热心网友
04.26
MySQL执行大量update锁表_将大批量更新改为小批量循环
数据库
MySQL执行大量update锁表_将大批量更新改为小批量循环

MySQL UPDATE卡表主因是WHERE未走索引导致锁全表,或大范围更新长期持锁;应确保索引命中、分批提交、加sleep限流、避开高峰,并优先用pt-archiver替代手写脚本。 UPDATE 为什么会让整个表卡住 MySQL的UPDATE操作,默认确实是行级锁,但这有个重要前提:WHERE条

热心网友
04.26
mysql如何提升InnoDB的性能_mysqlInnoDB优化方法
数据库
mysql如何提升InnoDB的性能_mysqlInnoDB优化方法

MySQL InnoDB 性能调优:从核心参数到避坑指南 提到 MySQL 性能优化,InnoDB 引擎绝对是绕不开的核心。但面对一堆参数和配置,从哪儿下手才能立竿见影?今天,我们就来聊聊几个能直接带来性能提升的关键调整点,以及那些看似无害、实则拖垮数据库的常见操作。 增大 innodb_buffe

热心网友
04.26
mysql如何查看当前锁等待情况_分析information_schema锁表
数据库
mysql如何查看当前锁等待情况_分析information_schema锁表

MySQL锁等待排查:从瞬时快照到完整现场 数据库性能突然下降,事务长时间无响应?这通常是锁等待问题导致的。但锁究竟在哪里,谁在等待谁,如何快速精准定位?不必慌张,掌握一套从快照分析到上下文还原的组合排查方法,能帮助你迅速找到问题根源。 排查锁等待最快的方法是查询INNODB_LOCK_WAITS表

热心网友
04.26

最新APP

宝宝过生日
宝宝过生日
应用辅助 04-07
台球世界
台球世界
体育竞技 04-07
解绳子
解绳子
休闲益智 04-07
骑兵冲突
骑兵冲突
棋牌策略 04-07
三国真龙传
三国真龙传
角色扮演 04-07

热门推荐

死亡搁浅2奖杯成就如何达成
游戏攻略
死亡搁浅2奖杯成就如何达成

死亡搁浅2的奖杯成就系统丰富多样,吸引着众多玩家去探索和挑战 想要集齐那些闪闪发光的奖杯?这趟旅程可不只是简单的送货。它考验的是你在广袤而孤寂的世界中,如何平衡规划、战斗、探索与联结。下面,我们就来梳理一下各类奖杯的获取之道。 主线任务达成类奖杯 这类奖杯是推动你前进的核心动力,关键在于跟随故事的脉

热心网友
04.27
出战追击天赋如何加点
游戏攻略
出战追击天赋如何加点

出战追击天赋加点指南:从基础到实战的精通之路 在游戏的战斗系统中,出战追击天赋的加点策略,往往是区分普通玩家与高手的关键一步。它直接决定了角色在追击环节的效率与威慑力,一套合理的加点方案,能让你的每一次追击都更具威胁。 天赋树结构与追击基础 想要精通加点,首先得摸清整个天赋树的脉络。出战追击天赋通常

热心网友
04.27
ARCRaiders地形勘察任务攻略
游戏攻略
ARCRaiders地形勘察任务攻略

在《Arc Raiders》中高效完成地形勘察任务 在《Arc Raiders》的世界里,地形勘察绝非简单的跑图,它往往是后续一切战术行动的基础。这项任务的核心目标非常明确:对指定区域的地形地貌、战略要点及潜在风险进行一次全面而细致的“体检”。 第一步:明确目标,进入状态 接到任务后,首先要做的不是

热心网友
04.27
SOL币适合长期持有吗?哪里能买到SOL币
web3.0
SOL币适合长期持有吗?哪里能买到SOL币

SOL币:是长期主义的价值之选,还是技术新贵的风险博弈? 在公链赛道,Solana(SOL)这个名字近几年可谓风头正劲。它以“高性能以太坊替代品”的标签闯入市场,凭借惊人的处理速度和低廉的交易费用,迅速聚拢了开发者与投资者的目光。但热潮之下,一个根本问题始终萦绕:SOL究竟适不适合长期持有?又该从哪

热心网友
04.27
禁闭求生2有什么小技巧
游戏攻略
禁闭求生2有什么小技巧

禁闭求生2:微观世界生存指南 在《禁闭求生2》这个危机四伏又妙趣横生的微观世界里,掌握一些核心技巧,能让你的生存之旅从容不少。下面这份指南,或许能帮你更快地从挣扎求生转向游刃有余。 合理规划基地建设 基地是你的生存命脉,选址和规划至关重要。第一步,是找到一个既安全、资源又相对富集的区域。初期资源有限

热心网友
04.27