You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Stitch同步MySQL时触发DAY_OF_MONTH致命错误求助

问题描述

我配置了基于MySQL的Stitch复制任务,以timestamp类型列作为增量键,正常运行数月后突然报出致命错误,错误日志如下:

2023-02-02 10:32:32,987Z tap - FATAL [main] tap-hp-mysql.main - Fatal Error Occurred - DAY_OF_MONTH
2023-02-02 10:32:32,990Z tap - ERROR [main] #error {
2023-02-02 10:32:32,990Z tap - :cause DAY_OF_MONTH
2023-02-02 10:32:32,990Z tap - :via
2023-02-02 10:32:32,990Z tap - [{:type java.sql.SQLException
2023-02-02 10:32:32,990Z tap - :message DAY_OF_MONTH
2023-02-02 10:32:32,990Z tap - :at [com.mysql.cj.jdbc.exceptions.SQLError createSQLException SQLError.java 129]}
2023-02-02 10:32:32,990Z tap - {:type com.mysql.cj.exceptions.WrongArgumentException
2023-02-02 10:32:32,990Z tap - :message DAY_OF_MONTH
2023-02-02 10:32:32,990Z tap - :at [jdk.internal.reflect.NativeConstructorAccessorImpl newInstance0 NativeConstructorAccessorImpl.java -2]}
2023-02-02 10:32:32,990Z tap - {:type java.lang.IllegalArgumentException
2023-02-02 10:32:32,990Z tap - :message DAY_OF_MONTH
2023-02-02 10:32:32,991Z tap - :at [java.util.GregorianCalendar computeTime GregorianCalendar.java 2645]}]
2023-02-02 10:32:32,991Z tap - :trace
错误分析与解决方法

错误原因

这个DAY_OF_MONTH错误是Java的GregorianCalendar类解析日期时抛出的非法参数异常,核心原因是MySQL目标表中存在无效的timestamp值,导致Stitch的tap-mysql组件无法正常解析这些日期。

常见无效timestamp场景:

  • 存储了'0000-00-00 00:00:00'这类零值日期(MySQL允许存储,但Java日期解析器不支持)
  • 存在不存在的日期(如'2023-02-30')
  • timestamp列值格式不符合标准,或存在截断、乱码
  • 超出MySQL timestamp默认合法范围(1970-01-01 00:00:01 至 2038-01-19 03:14:07)的日期

解决步骤

  1. 定位问题数据
    针对复制任务对应的表,执行以下SQL查询找出无效数据:
-- 查询零值日期
SELECT * FROM 你的表名 WHERE 增量键列 = '0000-00-00 00:00:00';

-- 查询超出timestamp合法范围的日期
SELECT * FROM 你的表名 WHERE 增量键列 < '1970-01-01 00:00:01' OR 增量键列 > '2038-01-19 03:14:07';

-- 查询格式不符合标准的日期
SELECT * FROM 你的表名 WHERE 增量键列 REGEXP '^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$' = 0;
  1. 修复无效数据
  • 零值日期:更新为合法初始日期(如'1970-01-01 00:00:01'),或根据业务逻辑删除/标记这类数据
  • 非法日期:修正为实际存在的有效日期,或直接删除错误数据
  • 格式异常数据:重新整理为标准timestamp格式
  1. 调整配置(可选,优先修复数据)
    如果无法修改数据,可尝试在MySQL连接参数中添加sql_mode=ALLOW_INVALID_DATES,让MySQL允许存储无效日期,但这只是临时规避,仍可能引发其他问题,建议优先修复数据。

  2. 重启任务
    修复数据或调整配置后,重启Stitch复制任务,观察是否仍出现错误。

内容的提问来源于stack exchange,提问作者obautista

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 13:21:24