tidb DM all 模式迁移数据,空库无法同步

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

  • 【TiDB 版本】:v4.0.0
  • 【问题描述】:从mysql实例同步数据到tidb,源库上面有空库,库里没有数据,没有表,没有同步到tidb的实例上面。
    log打印信息有:[2020/09/28 10:48:12.501 +08:00] [INFO] [common.go:109] [“no tables need to sync”] [schema=empty_db]
    empty_db 是库名。

dm版本为: dm-v1.0.6
配置如下:

name: test # 名称可以自定以
task-mode: all
is-sharding: true

target-database:
host: “172.16.0.15” # 目的数据库 host
port: 3306 # 目的数据库 port
user: “root”
password: “vzule0P5q1v38=” # 如果密码不为空,也需要配置 dmctl 加密后的密码

功能配置集********

black-white-list: # 定义表的过滤规则
bw-rule-1:
ignore-dbs: [“information_schema”, “performance_schema”, “mysql”, “sys”] # 忽略哪些库
do-dbs: [“empty_db”] # 注明要同步也不同步。

--------------实例配置----------------------

mysql-instances:

  • source-id: “mysql-replica-01” # worker 数据 ID
    black-white-list: “bw-rule-1”
    mydumper-thread: 4 # mydumper 用于导出数据的线程数量,在 v1.0.2 版本引入
    loader-thread: 16 # loader 用于导入数据的线程数量,在 v1.0.2 版本引入
    syncer-thread: 16 # syncer 用于同步增量数据的线程数量,在 v1.0.2 版本引入

若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

你好,确认下无法同步是指什么? 确认下下游是否创建 empty_db 库,query-status test 查看一下同步任务状态,多谢。

无法同步,指的是上游的空库empty_db没有同步到下游数据库。
query-status test 返回的binlog位置是正确的,状态是sync,具体如下:
“subTaskStatus”: [
{
“name”: “test”,
“stage”: “Running”,
“unit”: “Sync”,
“result”: null,
“unresolvedDDLLockID”: “”,
“sync”: {
“totalEvents”: “0”,
“totalTps”: “0”,
“recentTps”: “0”,
“masterBinlog”: “(mysql-bin.000003, 14752)”,
“masterBinlogGtid”: “4cc4e0af-f80a-11ea-b370-525400f69366:1-9,3ddc4d01-f80a-11ea-a8a7-525400b4f70d:1-47”,
“syncerBinlog”: “(mysql-bin.000003, 14752)”,
“syncerBinlogGtid”: “”,
“blockingDDLs”: [
],
“unresolvedGroups”: [
],
“synced”: true
}
}
],
“relayStatus”: {
“masterBinlog”: “(mysql-bin.000003, 14752)”,
“masterBinlogGtid”: “3ddc4d01-f80a-11ea-a8a7-525400b4f70d:1-47,4cc4e0af-f80a-11ea-b370-525400f69366:1-9”,
“relaySubDir”: “3ddc4d01-f80a-11ea-a8a7-525400b4f70d.000001”,
“relayBinlog”: “(mysql-bin.000003, 14752)”,
“relayBinlogGtid”: “”,
“relayCatchUpMaster”: true,
“stage”: “Running”,
“result”: null
},

能否提供完整 dm-worker.log 看一下。多谢。另外也可以确认 dump 的文件,即使是一个空库,也是会导出的。

dm-worker.log (244.7 KB)

问题可以复现的,是做全量的时候空库被忽略了。

是的。现在对于库里没有任务表的情况,会过滤掉。因为实际有数据需要被同步的,是表。

请问这边是什么场景,需要把空的库同步到下游去?

迁移老库数据到tidb,有些老库有应用会创建库再再特定数据构建表数据。

没太看懂。是应用在上游 MySQL 创建空的库,但只会在下游 TiDB 里构建表数据(且不会在下游 TiDB 里执行 CREATE DATABASE/TABLE 语句)?

场景是这样的,我们源库是mysql,在数据迁移的时候,会分几步进行,目前使用dm建立迁移任务,一开始的时候dm会先做全量,这时候如何源库只有空库是不会构建relay文件的,在后续的增量同步过程中创建空库会同步过去,但在首次同步时,空库没有同步,这个应该是有问题的。

后面可以关注下
https://github.com/pingcap/dm/issues/1144