DM同步mysql,未能生成数据库

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:v4.0.0
  • 【dm 版本】:v1.0.5
  • 【问题描述】:使用DM进行数据同步,tidb中未能生成需要同步的数据库 dm-worker.log里和mydumper相关的log: [2020/06/05 16:35:35.306 +08:00] [INFO] [mydumper.go:270] [“Tables needed to dump are not given, now we will start to generate table list that mydumper needs to dump through black-white list from given fromDB”] [task=test] [unit=dump]

[2020/06/05 16:35:35.412 +08:00] [INFO] [common.go:109] [“no tables need to sync”] [schema=cpic_data_test]

[2020/06/05 16:35:35.412 +08:00] [INFO] [mydumper.go:278] [“create mydumper”] [task=test] [unit=dump] [argument="[–host,<这里的IP被删除了>,–port,3306,–user,root,–outputdir,./dumped_data.test,–logfile,/dev/stderr,–verbose,3,–threads,4,–chunk-filesize,64,–skip-tz-utc,–tables-list,]"]

DM log里mydumper的参数中貌似没有数据库名,–tables-list貌似后面没有生成需要同步的表名

task配置:

---

name: test # global unique

task-mode: all  # full/incremental/all

target-database:

  host: "10.40.100.153"

  port: 4000

  user: "root"

  password: ""

mysql-instances:             # one or more source database, config more source database for sharding merge

  -

    source-id: "mysql-replica-01" # unique in all instances, used as id when save checkpoints, configs, etc.

    black-white-list:  "instance"

    # number of threads to use for dump data

    mydumper-thread: 4

    # number of threads to use for load data

    loader-thread: 16

    # number of threads to use for replicate binlog

    syncer-thread: 16

black-white-list:

  instance:

    do-dbs: ["cpic_data_test"]        # white list of upstream schemas needs to be replicated, regular expression (starts with ~) is supported

    do-tables:                        # white list of upstream tables needs to be replicated, (db-name, tbl-name) regular expression (starts with ~) is supported

    - db-name: "cpic_data_test"

      tbl-name: "~^cpic_.*"

麻烦在上游 MySQL 执行一下 show tables from cpic_data_test; 看下
我这边验证了一下配置文件是可以正常生成 tables-list 的,说明配置是正确的



感谢回复。

:handshake::+1:

麻烦再看看呢,上游应该是有相关表的。。。 我试过很多次都不成功。。。

你好,

提供下 dm 的版本信息。

请尝试以下操作看是否可以恢复同步,否则需要上传下 dm-worker 日志和 query-status 完整信息

  1. stop-task taskname
  2. stop.yml -l dm-master,dm-worker
  3. start.yml -l dm-master,dm-worker
  4. start-task taskname

dm-v1.0.5:
运行前:


运行后:

没能同步生成数据库

task配置:

dm-worker配置和log(图片和日志中,上游数据库信息被抹去或删除了):

dm-worker.log (35.8 KB)

麻烦给看看,刚刚重新试了一遍仍然是不行的

  1. 请问当前还没有同步其他表是吗?
  2. 能否麻烦您把这个表名直接写在do配置里,看下能否成功,不适用表达式
  3. 确认下上游 mysql 密码是否使用 dmctl 进行加密,多谢。

刚刚试了下,tbl-name: “cpip_recoders” ,这么设置,这个表被同步过来了,生成了数据库

你好,

  1. 二楼目前有测试后你的 配置文件写的没有问题,是可以生成 table-list 并且正常同步。

不使用正则表达式可以正确同步,请将正确同步 dm-worker.log 上传下,尝试使用正则表达式是否可以匹配到。

dm-worker1.log (88.9 KB)
这个是同步成功的dm-worker的log

这个日志是没问题的,辛苦再看下配置把,重新创建一个 task 文件,手打一下配置

这边根据你的 task 文件测试都是没有问题的。

好诡异,配置改成这个 tbl-name: “cpip*”, create mydumper 的–tables-list这里貌似解析成功的,和之前的问题不一样了,但是后面mydumper 没有启动工作。。。。
dm-worker2.log (29.6 KB)

你好,

日志中存在报错信息: parse mydumper metadata error: open dumped_data.test/metadata: no such file or directory

1, 检查下 dm-worker 部署目录权限,以及该文件是否存在

2, 可以删除该 dump 目录,使得 mydumper 重新 dump 数据

权限不应该有问题啊,我在之前的tbl-name: “cpip_recoders” 单表配置时候能同步成功的然后我就把临时生成的目录和log都删除了,改了task配置,重新启动工具,就有问题了。。。

目录权限是这样的: drwxrwxrwx. 8 root root 4096 6月 8 17:40 dm-v1.0.5-linux-amd64

[root@DT1040100153 dm-v1.0.5-linux-amd64]# ls -la 总用量 240 drwxrwxrwx. 8 root root 4096 6月 8 17:40 . dr-xr-x—. 28 root root 4096 6月 8 18:22 … drwxrwxrwx. 2 root root 4096 4月 27 14:58 bin drwxrwxrwx. 2 root root 4096 6月 5 15:01 conf -rw-r–r--. 1 root root 5846 6月 8 17:40 dm-master.log -rw-r–r--. 1 root root 185953 6月 8 18:26 dm-worker.log drwxr-xr-x. 3 root root 4096 6月 8 15:49 dm_worker_meta -rwxrwxrwx. 1 root root 11294 4月 27 14:58 LICENSE drwxr-xr-x. 3 root root 4096 6月 8 15:49 relay_log

目前 tidb 集群及其组件推荐使用 tidb 用户进行维护,dm-ansible 部署的时候也是通过 tidb 用户进行部署的,所以确认下部署方式

终极办法就是冲部署 dm 集群看下是否会出现一样的问题。

或者开启 drainer debug 模式,打印下同步失败的日志,这边找研发同学看下,目测是偶发问题,建议重新部署一套集群看是否还会复现该问题。