如何将实例内所有db增加统一前缀

有个需求,想讲不同机房的数据库同步到tidb集群内,但是,上游的mysql实例内的db较多(超过30个),已知可以使用dm的task的routes可以给database和table重命名,如何批量增加前缀呢?

routes:
  mysql-tidb-replica-02.route_rules.1:
    schema-pattern:  "*"
    target-schema: "east-*"
1 个赞

routes 中 schema-pattern 可以使用通配符匹配,target-schema 指的是下游具体的库名,需要详细写明,因此在 DM 中对库进行批量重命名时,需要配置多个 routes 规则。

挨个写的话,工作量有点大,看来只能这样了,期待后期可以支持通配符占位,这样就简单了。 另外,如果上游源实例有两个库 a和b,我routes分别定义成了test-a,test-b,后期又新增了c库,此时需要先手动task.yaml然后 update-task ?再建库? 如果先不改task,而是先建库,会在tidb同步成c库?后期再改task.yaml会自动重命名还是需要重新同步?

1 个赞

写了个python脚本,jdbc连上游,然后print生成改后task [捂脸]

这种情况下,先停掉 task 同步任务,修改 task.yaml 将 c 库的 routes 添加进去,然后执行 update-task,再启动同步任务是可以的。

如果是先建库,c 库如果在白名单里面,会同步到下游数据库中,c 库如果在黑名单里面,c 库不会同步到下游数据库中;此时再修改 task 任务,只会在已经同步的 checkpoint 点后面的内容同步到下游数据库中。如 c 库在下游不存在,有可能会出现报错的情况。

推荐使用先修改 task 任务,另外,如果都是 以 test 开头的库需要同步,可以使用正则表达式

那如果是黑白名单都是空的呢?既不在黑名单,也不在白名单上。

会的,看下官方文档过滤规则那里, 如果 do-dbsignore-dbs 都为空,则进入 table 过滤判断
如果 do-tablesignore-tables 都为空,则同步 test . t
https://pingcap.com/docs-cn/v3.0/reference/tools/data-migration/features/overview/#black-white-table-lists

好的,感谢。

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