在云上云下数据打通、报表库建设和业务库迁移场景中,数据库同步模式经常会被简化成一个问题:要不要实时?
实际项目里,这个问题不够。同步任务上线后,还要考虑目标端是否有历史数据、增量字段是否可靠、删除事件是否需要同步、源库日志和权限是否具备、失败数据能不能追踪。
本文用一个实践视角梳理全量、增量字段、CDC 三种模式的选择方式。DataMover 是一个可视化数据迁移同步工具,支持全量、增量字段和 CDC,可用于把这些策略落到具体任务配置里。DataMover 的 Manager/Worker 架构也比较适合容器化部署场景下统一管理同步任务。
总体判断
| 场景 | 建议模式 | 关键点 |
|---|---|---|
| 新库初始化 | 全量同步 | 建立目标端基线 |
| 历史补数 | 全量同步 | 补齐完整历史数据 |
| 定时报表同步 | 全量或增量字段 | 看数据量和延迟要求 |
| 持续追加表 | 增量字段同步 | 自增 ID 或更新时间可靠 |
| 删除事件同步 | CDC | 需要捕获变更日志 |
| 秒级延迟 | CDC | 普通调度不适合 |
如果要用容器化方式快速验证,DataMover 可以用 Docker 拉起 Manager/Worker 执行环境:
curl -fsSL https://down.datamover.cn/install.sh | bash
安装包入口:https://datamover.cn/download.html 文档地址:https://datamover.cn/doc/
全量同步
全量同步适合建立基线。它的实现逻辑清晰,适合新目标库、历史补数和低频刷新。
上线前要确认:
- 目标表是否为空。
- 是否允许清空目标表。
- 是否需要写入临时表。
- 大表是否需要分片字段。
- 目标端索引是否影响写入速度。
在容器化部署环境里,建议先用较小范围试跑,观察 Worker 内存、网络和目标端写入能力,再调整批大小。
增量字段同步
增量字段同步依赖自增 ID、更新时间或入库时间。它适合分钟级调度和低成本持续同步。
检查项:
| 检查项 | 标准 |
|---|---|
| 字段可排序 | 数值或日期时间字段优先 |
| 字段稳定推进 | 不倒退、不混乱 |
| 更新旧数据 | 更新时间必须变化 |
| 历史回填 | 不应回填到已同步位置之前 |
| 删除事件 | 物理删除不适合字段增量 |
DataMover 普通任务中可以配置增量字段和调度方式,适合把这类同步任务可视化管理起来。
CDC 实时同步
CDC 适合需要捕获 INSERT、UPDATE、DELETE 的场景,比如实时数仓、业务库到报表库、应用解耦数据分发。
上线前要看:
- 源库日志是否开启。
- 账号权限是否具备。
- 是否执行初始快照。
- 目标表已有数据是否会被影响。
- 位点重置流程是否明确。
- DDL 变更后目标端如何处理。
DataMover 实时任务基于 Debezium。配置时应先确认数据库日志和权限,再在任务中处理快照和字段映射。
实施过程
- 部署同步工具,确认 Manager 和 Worker 正常运行。
- 添加源端数据源,测试连接。
- 添加目标端数据源,测试连接。
- 创建普通任务或实时任务。
- 选择源表和目标表。
- 检查字段映射、主键、默认值和类型。
- 配置同步策略。
- 启动任务,观察输入、输出、失败数。
- 通过 SQL 校验目标端。
使用 DataMover 时,执行监控要和 SQL 校验一起看:DataMover 负责记录任务过程,数据库查询负责确认最终结果。
DataMover 文档中有更详细的参数说明:https://datamover.cn/doc/ 首页:https://datamover.cn 安装包入口:https://datamover.cn/download.html
上线检查清单
| 检查项 | 目的 |
|---|---|
| 主键或唯一键 | 便于更新和抽样校验 |
| 增量字段 | 判断字段增量是否可靠 |
| 删除策略 | 判断是否必须 CDC |
| 目标表状态 | 防止误清空或误覆盖 |
| 字段类型 | 防止写入失败 |
| 字符集/时区 | 防止乱码和时间偏移 |
| 错误数据 | 追踪目标端写入失败 |
| SQL 校验 | 确认最终数据一致 |
SQL 校验
-- 行数
SELECT COUNT(*) FROM source_table;
SELECT COUNT(*) FROM target_table;
-- 时间范围
SELECT MIN(update_time), MAX(update_time) FROM source_table;
SELECT MIN(update_time), MAX(update_time) FROM target_table;
-- 聚合
SELECT status, COUNT(*) FROM source_table GROUP BY status ORDER BY status;
SELECT status, COUNT(*) FROM target_table GROUP BY status ORDER BY status;
-- 抽样
SELECT * FROM source_table WHERE id IN (1, 100, 1000);
SELECT * FROM target_table WHERE id IN (1, 100, 1000);
金额类数据可以加:
SELECT status, COUNT(*) AS cnt, SUM(amount) AS total_amount
FROM source_table
GROUP BY status
ORDER BY status;
踩坑记录
- 有
update_time不代表增量字段可靠。 - CDC 上线前一定要确认日志和权限。
- 初始快照要和目标表状态一起评估。
- 任务完成不等于数据一致。
- 批大小需要结合 Worker 内存和目标端写入能力调整。
总结
全量解决基线,增量字段解决规则化持续同步,CDC 解决完整变更捕获。云上云下或容器化部署场景中,工具可以降低部署和运维成本,但上线前的检查清单和 SQL 校验依然是同步任务能否长期稳定运行的关键。
