# 常见问题-任务类(FAQ)
📚 温馨提示: 据用户反馈统计,95% 的使用问题都能通过认真阅读文档得到解决。我们建议您在联系客服前,先查阅相关操作指南、配置说明或本 FAQ。这不仅能更快定位问题,还能帮助您更深入地掌握 DataMover 的强大能力。
阅读即赋能,理解即掌控。祝您使用愉快,数据流转如丝般顺滑!✨
- 📞 客服电话:18032410846
- 💬 微信客服:扫描官网二维码添加
- 📧 邮箱:service@datamover.cm
恭喜你已经完成了DataMover的安装,管理界面和执行引擎都已正常启动,下面是常见的数据同步过程中的问题。
# 1. 实时任务启动失败:未开启CDC
DataMover 支持两类任务:
普通任务
- 全量同步:适用于数据量较小的表,可选择“清空目标表后同步”,通常用于每日一次初始化。
- 增量同步:适用于大表,基于增量字段(如自增主键、
create_time或update_time)周期性同步新增/变更数据。
实时任务
基于数据库的 CDC(Change Data Capture)机制,实时捕获源库的 INSERT / UPDATE / DELETE / TRUNCATE 操作,并在目标库重放对应 SQL。
# 🔍 排查步骤:
确认源数据库已正确开启 CDC 功能
不同数据库要求如下:MySQL:必须开启
binlog,且格式为ROW,例如:[mysqld] log-bin=mysql-bin binlog-format=ROW server-id=1PostgreSQL:需开启
WAL并设置wal_level = logical,同时创建具有REPLICATION权限的用户。SQL Server:需启用数据库级 CDC 和具体表的 CDC。
Oracle:需配置并启动
LogMiner,并授予相应权限。
确认 JDBC 账号具备 CDC 订阅权限
例如:- MySQL 用户需拥有
REPLICATION SLAVE和REPLICATION CLIENT权限; - PostgreSQL 用户需有
LOGIN+REPLICATION属性;
- MySQL 用户需拥有
- 权限不足将导致任务启动即报错(常见错误如
CanalParseException)。
- 建议首次使用先验证基础连通性
- 先选择一张小表,创建一个普通全量任务进行一次性同步。
- 若成功,说明网络、账号、驱动等基础配置无误;
- 再在此基础上配置实时任务或复杂增量任务,降低排查难度。
# 2. 任务运行失败:通用方案
任务运行失败不要慌,点击任务操作列点击更多操作中的日志按钮,下载任务日志。
压缩包中有三个文件reader.log(源端数据抽取日志)、writer.log(目的端写入日志)、worker.log(引擎调度日志)。
将日志中的***报错信息发给AI***,他会告诉你问题原因,能帮助你解决百分之九十的问题。

# 3. 任务运行失败001:目标字段非空约束冲突
现象
同步任务因目标表字段设置了 NOT NULL 约束而失败,但源数据中该字段存在空值。
示例日志
ERROR 2026-01-07 09:09:18.144 [exec-8] xxxxxxxx.x(154): 数据库批量Upsert出错,table=sync_target_table(0,1000):
org.springframework.dao.DataIntegrityViolationException: PreparedStatementCallback; SQL [INSERT INTO `sync_target_table`(`id`, `result_id`, `metric_a`, `metric_b`, `wavelength`, `value`) VALUES (?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE `id` = VALUES(`id`), `result_id` = VALUES(`result_id`), `metric_a` = VALUES(`metric_a`), `metric_b` = VALUES(`metric_b`), `wavelength` = VALUES(`wavelength`), `value` = VALUES(`value`)]; Column 'wavelength' cannot be null; nested exception is java.sql.BatchUpdateException: Column 'wavelength' cannot be null
原因分析
目标表的 wavelength 字段不允许为空,但源表对应记录中该值为 NULL 或缺失,导致数据库拒绝写入。
解决方案 在 DataMover 的字段映射中,为该字段配置默认值,避免空值写入。例如:
default(wavelength, '0')
✅ 支持任意默认值,如
'N/A'、'未知'、0等,根据业务语义选择。
# 4. 任务运行失败002:主键自增与多源同步冲突
现象 目标表主键设置为自增(AUTO_INCREMENT),但在多源同步或保留源 ID 的场景下,容易引发主键重复或写入异常。
原因分析
- 若多个源表同步到同一张目标表,源端
ID可能重复; - 若目标表启用自增主键,又试图写入显式
ID值,部分数据库(如 MySQL)会报错或产生意外行为。
推荐方案 不要依赖自增主键,而是新增一个全局唯一标识字段作为主键。 在 DataMover 映射配置中,为目标表的主键字段使用内置函数生成 UUID:
uuid()
✅ 该方式确保每条记录全局唯一,彻底规避主键冲突问题,适用于多源合并、跨库同步等复杂场景。
# 5. 任务运行失败003:数据类型转换失败
现象
源表以字符串(如 VARCHAR)存储数值或带单位的数据(如 "156CM"),但目标表字段为数值类型(如 DECIMAL),导致转换失败。
示例日志(脱敏)
ERROR 2026-01-07 11:54:59.699 [exec-16] 7ddd1167076944958678d209bb9e00c3.a(99): Data format conversion exception, field:wal_length, trying to convert 156CM to BigDecimal: java.lang.IllegalStateException: 转换出错,null
解决方案(二选一)
# 方案一:保留原始格式
将目标表字段类型改为 VARCHAR,直接存储原始字符串,避免清洗逻辑。
# 方案二:清洗为纯数值(推荐)
使用 DataMover 函数表达式提取有效数字。例如,将 "156CM"、"170 cm" 等清洗为 156、170:
int(trim(replace(replace(lower(val(height)), 'cm', ''), ' ', '')))
💡 不熟悉函数写法?只需将 函数使用指南链接发送给任意 AI 助手(如通义千问),它能根据你的需求自动生成可用表达式!
# 6. 任务运行失败004:外面约束失败
目标表有外键约束,主表中值不存在,导致子表入库失败。
ERROR 2026-01-07 14:48:36.365 [exec-16] xxxxxxxx.x(154): 数据库批量Upsert出错,table=detail_table(22000,22994):
org.springframework.dao.DataIntegrityViolationException: PreparedStatementCallback; SQL [INSERT INTO `detail_table`(`id`, `parent_id`, `wavelength`, `insertion_loss`, `return_loss`, `responsivity`, `directivity`, `sub_result`, `work_order`, `serial_no`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE `id` = VALUES(`id`), `parent_id` = VALUES(`parent_id`), `wavelength` = VALUES(`wavelength`), `insertion_loss` = VALUES(`insertion_loss`), `return_loss` = VALUES(`return_loss`), `responsivity` = VALUES(`responsivity`), `directivity` = VALUES(`directivity`), `sub_result` = VALUES(`sub_result`), `work_order` = VALUES(`work_order`), `serial_no` = VALUES(`serial_no`)]; Cannot add or update a child row: a foreign key constraint fails (`target_db`.`detail_table`, CONSTRAINT `detail_table_ibfk_1` FOREIGN KEY (`parent_id`) REFERENCES `main_table` (`id`) ON DELETE CASCADE); nested exception is java.sql.BatchUpdateException: Cannot add or update a child row: a foreign key constraint fails (`target_db`.`detail_table`, CONSTRAINT `detail_table_ibfk_1` FOREIGN KEY (`parent_id`) REFERENCES `main_table` (`id`) ON DELETE CASCADE)
错误原因:
程序尝试向子表(detail_table)插入数据时,其关联的主表外键字段(parent_id)在主表(main_table)中不存在对应记录,违反了数据库的外键约束。
典型场景:
- 主表数据尚未同步完成,子表数据已开始写入;
- 源数据中的
parent_id值有误或已被删除; - 同步任务未按“先主表、后子表”的顺序执行。
解决建议:
- 确保主表(
main_table)中已存在对应的id记录; - 检查源数据中
parent_id字段的值是否有效且一致; - 调整同步任务依赖关系,保证主表数据先于子表写入,使用CRON调度,精确空值主表和子表的同步时间。