DM从MySQL同步数据到TiDB,任务自动重启,totalBytes值改变

  • 【TiDB 版本】:v4.0.0
  • 【DM 版本】:v4.0.0
  • 【问题描述】:

1.速度偏慢
导出数据:2小时 600G
导入速度:600G数据9.15 11点至今3天多进度320G,50%
看了官方优化,DM配置优化,导入主要为 pool-size 参数,当前设置为1,如果加大参数,会对服务器造成很大压力

2.报错,任务自动重启
第一次自动重启
{ "result": true, "msg": "", "sources": [ { "result": true, "msg": "", "sourceStatus": { "source": "4303-replica-01", "worker": "dm-172.18.41.14-8262", "result": null, "relayStatus": null }, "subTaskStatus": [ { "name": "dm-bi-4303", "stage": "Running", "unit": "Load", "result": null, "unresolvedDDLLockID": "", "load": { "finishedBytes": "326922452194", "totalBytes": "300626473511", "progress": "108.75 %", "metaBinlog": "(mysql4303-bin.003539, 923417931)" } } ] } ] }
状态中 totalBytes原来是 619337004993 ,导致progress>100%,查看日志:

发现有报错,自动close,并重启任务。

第二次自动重启:

通过观察,发现重启后finished_bytes+totalBytes=第一次启动任务的totalBytes大小

第一次重启:
[2020/09/18 14:07:40.167 +08:00] [INFO] [status.go:75] ["progress status of load"] [task=dm-bi-4303] [unit=load] [finished_bytes=318710531482] [total_bytes=300626473511] [total_file_count=2582] [progress="106.02 %"]

第二次重启:
[2020/09/18 19:47:25.164 +08:00] [INFO] [status.go:75] ["progress status of load"] [task=dm-bi-4303] [unit=load] finished_bytes=339693566024] [total_bytes=279643438969] [total_file_count=2497] [progress="121.47 %"]

所以这里自动重启后获取totalBytes的逻辑有问题?

麻烦帮忙看看,thx

  1. 麻烦上传完整的 dm-worker 日志
  2. DM 版本是什么? 没有 4.0.0 的 DM 版本
  3. 麻烦上传 task 任务配置

目前在任务重启后,由于自动清理临时文件的特性,total_bytes会减少,导致进度大于100%。这个问题只是显示问题,不影响导入,预计下个版本修复

错误看上去是error 8025导致的(日志中有),没有显示在query-status里吗

抱歉,手误,DM版本是 v2.0.0-rc.2
这边先根据这个错误 error 8025 排查一下

好的,了解,看起来是显示问题,导入还在继续进行,
error 8025 没有在query-status中显示,除了totalBytes和progress,其他看起来都正常

1 个赞

看来主要是显示问题,并不影响正常导入。如果确认导入成功,麻烦反馈一下结果。

好的,目前还在导入,看起来速度需要优化,下次适当调大pool-size参数在试一下,除此外,有什么其他的优化建议吗?

你好,最新进度:


相关报错持续存,并已在query-status中显示,同步进度停止。
由于日志大小超过限制,放入云盘,麻烦下载:
链接:百度网盘-链接不存在 密码:8yfb

报错的意思是说导入的数据单行超过 6MB 限制,目前 TiDB 单行最大支持 6MB,超过 6MB 数据无法保存。这类行数据,先跳过导入吧。

https://docs.pingcap.com/zh/tidb/stable/tidb-limitations#单行的限制

你好,
看了下,有两个方法,一个是skip,但是针对DDL语句,
一个是remove,这边执行报错



官网看到这个命令在paused状态可以用,但是执行报错

https://docs.pingcap.com/zh/tidb-data-migration/dev/manage-schema#原理介绍

你好,上述你提到的两个命令,都无法使用。原因如下:

  • sql-skip:sql-skip 指的是跳过 下游 TiDB 不支持执行的 SQL 语句,一般 query-status 中查看的报错是
    Error 1105: unsupported 此类不支持的 SQL 语句需要使用 sql-skip 跳过。(注意,在 2.0 中以使用 handle-error 来替代 sql-skip)
  • operator-schema remove:只支持增量同步阶段,目前你这边还在 load 全量导入阶段,暂不支持。
    https://docs.pingcap.com/zh/tidb-data-migration/dev/manage-schema

另外上面报错的问题是因为 导入的数据单行超过 6MB 限制,即使你这边跳过这一行数据顺利同步,后面也有可能因其他行超出限制导致报错,建议你这边先处理下超过 6M 的数据,在进行数据导入。

如果只有这个表存在超过 6M 数据,先在 task 中配置黑白名单,将此表过滤掉,恢复同步任务,让其他表的数据先同步到下游中。

如果只有该行数据超过 6M,可以修改下 checkpoint 信息,跳过该条 SQL(不推荐,跳过该条 SQL,会有数据丢失,建议先处理下超过 6M 的数据)

按照此方法测试,貌似黑名单无效:
1.task中添加黑名单:

    ignore-tables:
    - db-name: "azkaban"
        tbl-name: "project_files"
    - db-name: "azkaban_storage"
        tbl-name: "project_files"
    - db-name: "azkaban_177"
        tbl-name: "project_files"
    - db-name: "azkaban_yunying"
        tbl-name: "project_files"

2.恢复同步任务:
tiup dmctl --master-addr 172.18.41.15:8261 query-status dm-bi-4303

有尝试过 stop-task start-task 重启同步任务吗?黑白名单过滤规则配置是怎样的?如果同时配置了 do 和 ignore,黑白名单中 do 的优先级高于 ignore 的。

1.stop-task start-task是会重新全量dump load的吧,这个量比较大,所以没有尝试,需要重启任务才能读取修改的配置吗
2.过滤规则:

  4303-replica-01:
    do-dbs: ["azkaban","azkaban_177","azkaban_api_197","azkaban_api_198","azkaban_api_data","azkaban_storage","azkaban_storagenew","azkaban_yunying"......]
    ignore-tables:
    - db-name: "azkaban"
        tbl-name: "project_files"
    - db-name: "azkaban_storage"
        tbl-name: "project_files"
    - db-name: "azkaban_177"
        tbl-name: "project_files"
    - db-name: "azkaban_yunying"
        tbl-name: "project_files"

这个问题可参考,目前是 load 阶段,重启会断点续传,可以确认下 checkpoint 中断点信息的。

哦哦,是的是的,:grin:
stop-task,start-task后,又有新的报错:


在TiDB中查看,已经load部分数据,而且sql_mode这边已经置空

这个需要在 task 中配置一下 session.sql_mode, 2 .0.x 版本 DM-worker 里集成了一个 mock TiKV 的 TiDB,需要在 task 配置中修改 session.sql_mode 参数。
https://docs.pingcap.com/zh/tidb-data-migration/v2.0/task-configuration-file-full

1 个赞

感谢感谢,目前观察已经正常同步:handshake:

:call_me_hand:

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