讲师中心 微信公众号
AI工具推荐 视频效率加速

mysql如何实现高性能的主从复制_调整binlog格式与同步策略

胖强大大_3361

胖强大大_3361

发布时间:2026-03-18 12:08:57

|

167人浏览过

|

来源于php中文网

原创

STATEMENT格式易致主从数据不一致,因仅记录SQL语句而忽略执行上下文;推荐统一使用ROW格式,并通过三步安全切换;sync_binlog=1与innodb_flush_log_at_trx_commit=1或2组合兼顾安全与性能;从库需开启read_only防止误写。

mysql如何实现高性能的主从复制_调整binlog格式与同步策略

为什么 STATEMENT 格式在主从复制中容易出错

因为 STATEMENT 只记录 SQL 语句本身,不记录执行时的实际数据上下文。一旦语句里有函数(比如 NOW()、UUID()、USER())或依赖会话变量(如 @var),从库重放时结果很可能和主库不一致,导致数据漂移。

常见错误现象:Slave_SQL_Running: No,查 SHOW SLAVE STATUS\G 发现 Last_SQL_Error 提示“Column count doesn’t match”或函数不可重现;更隐蔽的是数据对不上但复制没报错。

  • 除非你 100% 确保所有写操作都是确定性 SQL(无函数、无变量、无临时表),否则别用 STATEMENT
  • MIXED 是自动降级策略,看似省心,但判断逻辑黑盒化,反而让问题更难复现和定位
  • 生产环境统一用 ROW —— 它记录的是行变更前后的镜像,主从一致性有保障

怎么安全地把 binlog_format 从 STATEMENT 切到 ROW

不能直接改全局变量,因为已有连接仍沿用旧格式,可能造成混合日志,引发从库解析失败。必须让新连接和后续所有写入都走新格式。

实操分三步:

  • 先在主库执行 SET GLOBAL binlog_format = 'ROW',再确认生效:SELECT @@binlog_format
  • 重启所有应用连接池(或等旧连接自然断开),确保新连接使用新格式;重点检查 ORM 是否缓存了连接并复用旧会话
  • 从库无需改 binlog_format(它只读不写),但要确认 relay_log_format 是默认值(通常不用动)

注意:ROW 日志体积更大,尤其批量更新大字段时。如果磁盘 IO 或网络带宽吃紧,得配合 binlog_row_image = MINIMAL(MySQL 5.6+)减少冗余字段记录。

MySQL8 CRM Schema Design Expert
MySQL8 CRM Schema Design Expert

面向 CRM 系统的 MySQL 8 数据库模式设计。当用户需要为客户关系管理(CRM)系统设计、评审、优化或生成数据库模式时,应使用此项技能。

下载

sync_binlog 和 innodb_flush_log_at_trx_commit 怎么配才不丢数据又不太慢

这两个参数共同决定主库崩溃后最多丢失多少事务。设太高(比如都为 1)最安全但性能差;设太低(比如都为 0)快是快了,但主库宕机可能丢一整秒的提交。

  • 推荐组合:sync_binlog = 1 + innodb_flush_log_at_trx_commit = 1:强一致性,适合金融类场景
  • 折中方案:sync_binlog = 1 + innodb_flush_log_at_trx_commit = 2:InnoDB 日志刷到 OS 缓存而非磁盘,崩溃可能丢最近 1 秒事务,但性能提升明显
  • 绝对不要设 sync_binlog = 0:binlog 不刷盘,主库崩溃后从库无法追平,复制链直接断裂

验证是否生效:在主库执行 SHOW VARIABLES LIKE 'sync_binlog' 和 SHOW VARIABLES LIKE 'innodb_flush_log_at_trx_commit',两个值必须是你设的数字,不是只读变量。

从库延迟高,光调 slave_parallel_workers 不够

单纯增加并行线程数(比如设成 8)在多数场景下效果有限,甚至可能因锁竞争更慢。真正瓶颈常在单个 Relay Log 文件解析或 SQL 线程争抢同一个表。

  • 先看 SHOW SLAVE STATUS\G 中的 Seconds_Behind_Master 和 Slave_SQL_Running_State:如果是 “Reading event from the relay log”,说明 Relay Log 解析慢,优先优化磁盘 IO 或换 SSD
  • 如果是 “System lock” 或 “Updating”,大概率是热点表冲突,考虑开启 slave_parallel_type = LOGICAL_CLOCK(MySQL 5.7+),它按事务组并行,比按库并行更细粒度
  • 避免大事务:单个事务更新 10 万行,哪怕开了 8 个 worker,也得等它全部跑完才能调度下一个,延迟照样飙高

最容易被忽略的一点:从库的 read_only = ON 必须开启。否则应用误连从库写入,不仅破坏主从一致性,还会让 GTID 混乱,后续修复成本极高。

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

相关标签:

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

热门AI工具

更多
花生AI
花生AI Hot

一款AI视频创作工具,主要用于B站推出的AI视频创作工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Flowith
Flowith Hot

Flowith是一款基于画布和智能体工作流的 AI 协作工作空间。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

相关专题

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

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

2513

2023.06.20

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

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

1519

2023.06.21

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

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

895

2023.07.18

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

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

3592

2023.07.19

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

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

6208

2023.07.25

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

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

1319

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

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

6471

2023.08.11

mysql忘记密码
mysql忘记密码

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

5562

2023.08.14

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

0

2026.11.06

热门下载

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

精品课程

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

共1课时 | 194人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn