0

0

mysql如何利用Binlog进行增量数据同步迁移_mysql数据追平技术

P粉602998670

P粉602998670

发布时间:2026-03-10 01:39:24

|

604人浏览过

|

来源于php中文网

原创

mysql增量同步需确保binlog开启且配置合规:server_id为非0唯一整数,binlog_format设为row,binlog_row_image=full;起始位点应通过flush tables with read lock+show master status获取或使用gtid;解析需用--base64-output=decode-rows -v参数或专业库;追平时采用幂等写入避免冲突。

mysql如何利用binlog进行增量数据同步迁移_mysql数据追平技术

Binlog 开启没?先确认 server_id 和格式

MySQL 增量同步的前提不是“有没有 Binlog”,而是它是否真正启用且配置合规。常见现象是执行 SHOW VARIABLES LIKE 'log_bin'; 返回 ON,但依然无法被下游消费——大概率是 server_id 未设或为 0,或者 binlog_formatSTATEMENT(不推荐用于同步)。

  • server_id 必须是非 0 整数,且在整个复制拓扑中唯一;主从混用相同值会导致连接拒绝或数据错乱
  • binlog_format 推荐设为 ROW:能精确捕获行级变更,避免函数、临时表、非确定性语句引发的主从不一致
  • 修改后需重启 MySQL 或动态生效(SET GLOBAL binlog_format = 'ROW';),但注意:已有事务不会回滚重写,只影响后续日志
  • 检查是否开启 binlog_row_image = FULL(默认值),否则 UPDATE 可能只记录变更列,下游解析失败

怎么安全地获取起始位点?别直接用 SHOW MASTER STATUS

迁移开始前必须锁定一个确定的、可复现的 Binlog 位置,否则追平过程会漏数据或重复。直接执行 SHOW MASTER STATUS; 拿到的位置,是当前最新写入点,不代表所有业务事务已落盘——尤其在高并发写入时,极易丢掉正在提交中的事务。

科大讯飞-AI虚拟主播
科大讯飞-AI虚拟主播

科大讯飞推出的移动互联网智能交互平台,为开发者免费提供:涵盖语音能力增强型SDK,一站式人机智能语音交互解决方案,专业全面的移动应用分析;

下载
  • FLUSH BINARY LOGS; 切换新日志文件,再立刻执行 SHOW MASTER STATUS;,可降低位点漂移风险
  • 更稳妥的方式是配合全局读锁:FLUSH TABLES WITH READ LOCK;SHOW MASTER STATUS; → 记录 FilePositionUNLOCK TABLES;(注意锁期间写入阻塞)
  • 若业务不可停写,改用 mysqlbinlog --read-from-remote-server + GTID 模式:先查 SELECT @@global.gtid_executed;,下游从该 GTID 集合开始拉取,语义更可靠

解析 Binlog 时,为什么 mysqlbinlog 工具输出看不懂?

mysqlbinlog 默认输出的是原始事件二进制转义内容,不是 SQL。直接看 UPDATE 事件会看到一堆 @1=... @2=... 字段引用,这是 ROW 格式下的字段序号映射,和表结构强绑定——一旦中途加减列、改类型,解析就失效。

  • --base64-output=DECODE-ROWS -v 参数才能看到可读的伪 SQL(如 ### UPDATE `db`.`t1` + ### WHERE + ### SET
  • 但这类输出仍是调试用,不能直接执行:含注释标记(###)、无事务边界、UPDATE 不带主键条件、DELETE 缺少 WHERE 子句细节
  • 生产环境别手写解析逻辑;用成熟客户端库(如 Python 的 mysql-replication、Go 的 go-mysql)处理事件流,它们自动维护列定义缓存、支持 GTID、能跳过特定库/表
  • 注意时区:Binlog 中的时间戳按服务器 system_time_zone 记录,下游解析时若未对齐,datetime 字段可能偏移

追平阶段如何避免主键冲突和重复应用?

增量同步不是简单“把日志重放一遍”。当目标库已有历史数据(全量导入后),再应用 Binlog 里的 INSERT,必然主键冲突;而跳过冲突又可能掩盖真实异常。

  • 全量导入时,务必禁用目标库的自增主键(SET FOREIGN_KEY_CHECKS=0; SET UNIQUE_CHECKS=0;),并用 INSERT IGNOREREPLACE INTO 处理重复
  • 增量阶段,推荐用“幂等写入”:将 INSERT 转为 INSERT ... ON DUPLICATE KEY UPDATEUPDATE 保留原 WHERE 条件(含主键+版本号/时间戳),DELETE 加上 LIMIT 1 防误删
  • 不要依赖 sql_log_bin=0 关闭日志来跳过某些操作——这会让下游永远丢失这部分变更,且影响主从一致性判断
  • 最易被忽略的一点:Binlog 里 CREATE TABLE 事件不含字符集声明(如 DEFAULT CHARSET=utf8mb4),若源库表用 utf8mb4_0900_as_cs 而目标库默认是 utf8mb4_0900_ai_ci,后续比较会出错

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

1131

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

340

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

381

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

2109

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

380

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

1642

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

585

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

439

2024.04.29

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

59

2026.03.06

热门下载

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

精品课程

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

共48课时 | 2.5万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 845人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号