“Dbsyncer、数据同步中间件、MySQL、增量、全量配置”——这几个词摆在一起,基本就说明你已经遇到了那种“库里数据要搬家,又不能停机太久”的活。我一开始是自己写脚本同步的,后来发现同步脚本越写越多,补数、断点、重复记录全靠人肉盯,实在费劲。直到同事给我安利了 Dbsyncer 这个开源数据同步中间件,我用它在测试环境把一套 MySQL 的数据同步到另一套 MySQL,全量、增量都跑了一遍,今天就把整个实操过程记下来,给自己留档,也给第一次接触 Dbsyncer 的人省点弯路的功夫。
这篇文章不是官方文档那种点按钮式教学,而是我实际配了一套 MySQL 到 MySQL 的同步之后,把“为什么这样做”“配置的时候注意什么”“我踩过什么坑”都揉进去的完整记录。你如果是搬库、做读写分离、搭测试环境数据、或者想把一个库的改动实时同步到另一个库,这篇文章基本够用。
1. 为什么要用 Dbsyncer 做 MySQL 同步,而不是继续写脚本
1.1 先想清楚你说的是“全量”还是“增量”
很多新人在刚开始接触数据同步时,会把全量同步和增量同步混为一谈。全量的意思很直白:把源库某张表的数据一次性全部搬到目标库。说白了这就是一次批量数据搬运,数据量大不大只影响执行时间。但现实业务几乎都有“搬完还要继续跟着源库变”的需求,目标库要能实时或准实时追平源库产生的新增、修改和删除操作,这就得靠增量同步来实现。
我在最初写同步脚本的时候,全都是用“定时任务 + where 时间字段”实现的。这种方案短时间能跑,但坑特别多:源表没有 update_time 怎么办?物理删除的字段怎么同步?漏了一小时任务导致重跑又怎么去重?每个问题最后都是靠人肉补救,根本谈不上可靠。
Dbsyncer 这种中间件走了另一条路:它把“采集数据库变更日志”和“按规则回放变更”这两件事单独接住了。全量任务负责搬存量数据,增量任务盯着源库的 binlog 一类日志流,把数据库自身的变更还原成可执行的操作,再同步到目标库。你不再需要关心“这分钟源库多了几条、少了哪条”,因为日志已经把变化顺序写清楚了。
1.2 有 Canal 有脚本方案,为什么我选了 Dbsyncer
数据库同步领域确实不是没有别的选择,比如 Canal 也是非常知名的一套东西,我也用过。但 Canal 的问题是,它本质上是给你一个数据通道,消费者逻辑你还是得自己写代码,同时还要处理消息顺序、断点续传、连不上消息服务、部署一堆组件等问题。对于“我只是要把 MySQL A 同步到 MySQL B”这种需求,Canal 的整套链路又重又长。
Dbsyncer 最大的体验差异是“配置化”:界面上先把数据源配置好,再配置同步方向、同步表、字段映射,点一下就能看到任务状态和日志。它把很多同步中间件需要自己开发的环节做成了图形界面操作,对只想快速解决数据复制问题的人来说,门槛低太多了。而且它是插件化架构,当前的场景里我用 MySQL 做源端和目标端,只要关注 MySQL 对应的驱动和日志解析逻辑就行,以后要接别的数据库也不至于推倒重来。
我还想强调一点:不要把 Dbsyncer 理解成只能同步 MySQL。它可以接多种关系库和数据存储,只是我这篇只拆解 MySQL 到 MySQL 的路径。这是目前被问得最多、也是最容易上手验证的一种组合,把这条路跑通了,其它组合的界面操作逻辑基本是类似的。
1.3 出发前先对着清单检查一遍
Dbsyncer 在执行同步任务时,需要源库和目标库都能被正常访问,增量场景还要求源库开启日志记录。我第一次配的时候就因为漏了源库的 binlog 检查,导致增量任务一直卡在初始化阶段。建议你按这个前置条件先自查:
- 源端 MySQL 和目标端 MySQL 必须允许 Dbsyncer 所在主机远程连接,不能用 localhost 限制账号。
- 源端 MySQL 需要打开 binlog,并且日志格式建议是 ROW;具体检查方法下文会有 SQL。
- 目标端 MySQL 需要有与源端表结构对应的库表,最好连表结构一起准备好,字段类型尽量一致。
- Kafka、Redis 这类组件不需要,Dbsyncer 是直接通过数据库协议读取日志和写入数据,这一点比很多需要额外消息队列的方案简单。
我第一次在同事的机器上看到这套东西时,第一反应是“又要部署什么中间件服务”,实际上它就是一个可执行的 Java 服务包,启动完自带管理页面,界面操作占大头,完全不是那种要写一堆 YAML 的服务。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备和 Dbsyncer 启动
2.1 安装、启动 Dbsyncer 的整个流程
Dbsyncer 是个 Java 服务,所以机器上得有 JRE 或 JDK。版本这块不同版本要求不同,我当时用的环境是 JDK 8 以上的版本,建议你装 JDK 8 或 11,遇到问题少很多。Windows 上解压安装包后,找启动脚本直接点;Linux 上一般就是解压 tar 包,然后用 nohup 或 systemd 把启动脚本挂后台。
我当时的操作大概是这样的:
- 从官方仓库的 Releases 页面下载对应系统的安装包。
- 解压到指定目录,比如
/opt/dbsyncer。 - 看目录下
