[Data Migration]TiDB sql_mode改為空之後 仍然會出現Error 1292: Incorrect datetime value: '0000-00-00 00:00:00' for column 'created_time'

【TiDB 版本】: v5.0.0-rc
【DM 版本】: v2.0.1
【问题描述】: Error 1292: Incorrect datetime value: ‘0000-00-00 00:00:00’ for column ‘created_time’

主因為來源數據有髒資料,已參考『AskTug』上相關文章,將TiDB sql_mode做調整
拿掉STRICT_TRANS_TABLES後,resume task ,但仍會有上述Error

後來直接將sql_mode設為’‘,resume task後仍然報錯。
set global sql_mode=’';

Resume Task

query status

Reference其他AskTug的文章:

Hi,请检查任务配置中的 target-database.session.sql_modehttps://docs.pingcap.com/zh/tidb-data-migration/stable/task-configuration-file-full#完整配置文件示例 在连接下游 TiDB 时,该项会有更高优先级作为 session sql mode。

如果没有的话,也可以在这里设置一个 sql mode 从而覆盖掉有问题的 sql mode。

另外请问
1 这个任务是全量任务还是增量任务?
2 开始任务的时候,上游的 SQL mode 是什么?能容许这条数据的插入吗?
3 任务进行过程中有没有更改上游的 SQL mode?

1 个赞

顧問好,

1.此任務為全量任務(full)
在task yaml檔案中加入以下(拿掉STRICT_TRANS_TABLES, NO_ZERO_IN_DATE,NO_ZERO_DATE)
target-database:
host: “172.31.13.101”
port: 4000
user: “tidb_dm_repl”
password: “xxxxx”

session:
sql_mode: “ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”

停止task
bin/dmctl -master-addr 172.31.13.107:8261,172.31.13.108:8261,172.31.13.109:8261 stop-task conf/task_c7_replication.yaml

啟動task
bin/dmctl -master-addr 172.31.13.107:8261,172.31.13.108:8261,172.31.13.109:8261 stop-task conf/task_c7_replication.yaml

吃到新sql_mode後,已可正常replication

2.上游MySQL sql_mode=‘ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION’

我們已經有判定是上游某張表有470筆 created_time='0000-00-00 00:00:00’髒資料
預計是想說先讓資料可以載入到TiDB後,我們再手動去更新TiDB,避免DM paused
無法正常跟CDC

還是說有更好的作法?
3. 沒有

如果同步任务配置的是 full 全量模式,query-status 查询到的 unit 不会进入 sync 的,full 只备份上游数据库,全量导入数据完成后,完成数据同步。unit 只会是 dump 和 load 两种状态才对。导入数据完成后,正确的状态如下:

                    "stage": "Finished",
                    "unit": "Load",

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。