Dm配置白名单时,支持库名中带有"-"字符吗

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

  • 【TiDB 版本】:dm 1.0.0 dm 1.0.2
  • 【问题描述】: 我本地测试,数据库中带有"-",可以正常同步,我同事使用 dm 1.0.2同样的配置,报错:
["Error: DB: h3-supplier - Could not execute query: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-supplier LIKE 't_supplier_cp_class_relation'' at line 1"] [task=h3] [unit=dump]

不带"-"的表可以正常同步

# 黑白名单全局配置,各实例通过配置项名引用。
black-white-list:
  global:
    do-tables:                        # 需要同步的上游表的白名单。
    - db-name: "~.*"              # 需要同步的表的库名。
      tbl-name: "~.*"

有可能是1.0.2在自动生成的 tables-list存在问题,先暂时建议通过在 task.yaml 为 mydumper 配置 extra-args 时指定一下白名单试下。

好的,我试一下

:+1::+1::+1:

dm 1.0.0中没有 tables-list参数,dm 1.0.2中 tables-list参数的表名没有转义,应该就是这个问题

:+1::+1::+1:

black-white-list: "global"
mydumper-config-name: "global"

他们的优先级是怎么样的?mydumper-config-name的配置要级别要比black-white-list高?但是我在1.0.0上配置了black-white-list和mydumpers(指定的 extra-args为空),执行时全部库表同步?

  source-id: "mysql2"
  black-white-list: "global"
  mydumper-config-name: "global"
  loader-config-name: "global"
  syncer-config-name: "global"

# 黑白名单全局配置,各实例通过配置项名引用。
black-white-list:
  global:
    do-tables:                        # 需要同步的上游表的白名单。
    - db-name: "~.*"              # 需要同步的表的库名。
      tbl-name: "~.*"
# mydumper 全局配置,各实例通过配置项名引用。
mydumpers:
  global:
    mydumper-path: "./bin/mydumper"   # mydumper 二进制文件的路径。
    extra-args: "" 

日志:

[2019/11/19 17:33:40.182 +08:00] [INFO] [mydumper.go:136] ["Thread 2 dumping data for `h3-basic-setting`.`t_basic_setting_parameter`"] [task=ti
db] [unit=dump]
[2019/11/19 17:33:40.182 +08:00] [INFO] [mydumper.go:136] ["Thread 1 dumping data for `h3-batting`.`t_basic_setmpany`"] 
[task=tidb] [unit=dump]
[2019/11/19 17:33:40.183 +08:00] [INFO] [mydumper.go:136] ["Thread 3 dumping data for `h3-batting`.`t_basic_seter_group`"] [t
ask=tidb] [unit=dump]

我确认一下。

在1.0中 如果 mydumper 没有在 extra-args 指定,即使有配置 white-list 也是全库 dump。

在1.0.2,同样的场景下,会将 white-list 配置在 extra-args 上以达到尽量少 dump 数据的目的。

在1.0.2的时候,white-list和mydumper 都指定了呢?

以 mydumper 为准。

好的,谢谢,我配置extra-args试试

嗯。测试验证下。新版本不排除会有未知的 bug。欢迎随时反馈。

可以的,使用extra-args可以配置成功,不过必须使用mysql的root用户.(或者需要某些权限,后续测试一下). 使用非root用户时报错

[2019/11/26 22:41:42.488 +08:00] [ERROR] [mydumper.go:164] ["Error dumping schemas (sys.metrics): SHOW VIEW command denied to user 'tidb'@'192.168.11.113' for table 'metrics'"] [task=single1] [unit=dump]

extra-args相关参数:

# Mydumper 全局配置,各实例通过配置项名引用。
mydumpers:
  global:
    mydumper-path: "./bin/mydumper"   # Mydumper 二进制文件的路径。
    extra-args: "-B test_db -T test_table"  # mydumper 的其他参数,从 DM 1.0.2 版本开始,DM 会自动生成 table-list 配置,在其之前的版本仍然需要人工配置。
在 task.yaml 的 mydumper extra-args 参数中手动加上 --regex 正则表达式设置要导出的库表。例如,如果要导出所有库中表名字为 hello 的表,可加上 --regex '.*\\.hello$',如果要导出所有表,可加上 --regex '.*'。

:+1::+1: