DTS(数据传输服务)在进行数据同步或迁移时,必须开启源数据库的Binlog功能,具体要求如下:
1. 开启Binlog的必要性
- 所有增量同步/迁移任务必须依赖Binlog。DTS通过解析源库的Binlog实现增量数据同步,若未开启Binlog,任务预检将失败且无法启动。
- 全量+增量任务需同时开启Binlog,否则无法保证数据一致性。
2. Binlog配置要求
(1)RDS MySQL实例
- 默认已开启Binlog,但需确保以下参数:
binlog_row_image = full
(否则预检报错)。- 若源实例为双主集群,需额外开启
log_slave_updates
参数。
(2)自建MySQL/MariaDB
- 手动开启Binlog,并配置:
log_bin = on
(开启Binlog)。binlog_format = row
(必须为ROW模式)。binlog_row_image = full
。- 双主集群需开启
log_slave_updates
。
(3)PolarDB MySQL版
- 开启参数
loose_polar_log_bin = ON
,并确保Binlog保留至少3天(建议7天)。
(4)PolarDB-X 2.0
- 通过控制台参数设置开启Binlog,并确保
binlog_row_image = full
。
3. Binlog日志保留时长
- RDS MySQL/PolarDB MySQL:至少保留3天(建议7天)。
- 自建MySQL/MariaDB/PolarDB-X 2.0:至少保留7天(全量+增量任务)。
- 若Binlog保留时间不足,可能导致DTS任务失败或数据不一致,且不在SLA保障范围内。
4. 检查与开启Binlog的方法
- 检查是否开启:
SHOW VARIABLES LIKE 'log_bin'; -- ON表示已开启 SHOW VARIABLES LIKE 'binlog_format'; -- 必须为ROW SHOW VARIABLES LIKE 'binlog_row_image'; -- 必须为FULL(MySQL 5.6及以上)
- 自建MySQL开启步骤:
- 修改配置文件
my.cnf
,添加/修改参数:log_bin = mysql_bin binlog_format = row binlog_row_image = full server_id = 2 -- 非1的唯一整数
- 重启MySQL服务。
- 修改配置文件
5. 重要限制与注意事项
-
DDL操作限制:
- 在全量迁移/同步阶段,禁止执行表结构变更的DDL操作,否则任务失败。
- 若仅执行全量迁移,迁移期间禁止向源库写入新数据。
-
双主集群特殊配置:
- 自建MySQL双主集群必须开启
log_slave_updates
,否则DTS可能遗漏Binlog日志。
- 自建MySQL双主集群必须开启
-
字符集与存储引擎:
- 不支持同步使用
ucs2
等非标准字符集的表。 - 存储引擎需为
InnoDB
,不支持FEDERATED
、MRG_MYISAM
等。
- 不支持同步使用
6. 典型场景总结
场景 | Binlog配置要求 |
---|---|
RDS MySQL → 其他数据库 | 确保binlog_row_image=full ,双主集群需开log_slave_updates |
自建MySQL → RDS/PolarDB | 开启Binlog,设置binlog_format=row 和binlog_row_image=full |
PolarDB MySQL版 → 其他 | 开启loose_polar_log_bin=ON ,保留Binlog≥3天 |
PolarDB-X 2.0 → 目标库 | 控制台开启Binlog,binlog_row_image=full |
关键结论
- 所有DTS增量任务必须开启Binlog,且配置为ROW格式+full模式。
- Binlog保留时间不足或参数错误是导致任务失败的常见原因,需特别注意。