drainer同步部分表时配置确认

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

  • 【TiDB 版本】:v3.0.14
  • 【问题描述】:

背景:tidb集群目前有几百个表,1T+数据。 现在需部署一套tidb binlog组件,从该集群同步10+个表的数据至一个新的tidb集群。

1: 请问老tidb集群版本是3.0.14, 新tidb集群版本是4.0 。 这种搭配会存在问题么

2: 部署drainer时,这种场景下进行首次备份及获取initial_commit_ts时,mydumper备份的应该是仅仅需要同步的10+个表吧,还是说需要备份整个tidb集群几百个表呢?

--   官网文档

如果下游为 MySQL 或 TiDB,为了保证数据的完整性,需要进行全量数据的备份与恢复。此时 initial_commit_ts 的值必须是全量备份的时间戳。

感谢

建议使用相同版本,多谢

mydumper备份的应该是仅仅需要同步的10+个表,drainer 中做过滤即可

mydumper导出时导出的是10多个表,drainer配置文件中过滤规则如下:

但部署并启动任务后却报错另外一个未导出也未配置的库下的xxx表未找到,帮确认一下,下面的过滤规则是配置不准确吗? 多谢


ignore-schemas = "INFORMATION_SCHEMA,PERFORMANCE_SCHEMA,mysql,dm_meta,tidb_loader,test"

replicate-do-db = ["pt_prime","pt_report","pt_search"]

[[syncer.replicate-do-table]]
db-name ="pt_prime"
tbl-name = "prime"

[[syncer.replicate-do-table]]
db-name ="pt_report"
tbl-name = "extra"

[[syncer.replicate-do-table]]
db-name ="pt_search"
tbl-name = "searchword"
[2020/06/05 20:00:02.938 +08:00] [INFO] [load.go:804] ["txnManager has been closed"]
[2020/06/05 20:00:02.938 +08:00] [INFO] [load.go:500] ["Run()... in Loader quit"]
[2020/06/05 20:00:02.938 +08:00] [INFO] [mysql.go:222] ["Successes chan quit"]
[2020/06/05 20:00:02.938 +08:00] [INFO] [load.go:748] ["run()... in txnManager quit"]
[2020/06/05 20:00:02.940 +08:00] [ERROR] [syncer.go:453] ["Failed to close syncer"] [error="table `mt_order`.`order_lock_risk`: table not exist"] [errorVerbose="table not exist\
github.com/pingcap/tidb-binlog/pkg/loader.init\
\t/home/jenk
ins/agent/workspace/release_tidb_3.0/go/src/github.com/pingcap/tidb-binlog/pkg/loader/util.go:32\
runtime.doInit\
\t/usr/local/go/src/runtime/proc.go:5222\
runtime.doInit\
\t/usr/local/go/src/runtime/proc.go:5217\
runtime.doInit\
\t/usr/l
ocal/go/src/runtime/proc.go:5217\
runtime.doInit\
\t/usr/local/go/src/runtime/proc.go:5217\
runtime.doInit\
\t/usr/local/go/src/runtime/proc.go:5217\
runtime.main\
\t/usr/local/go/src/runtime/proc.go:190\
runtime.goexit\
\t/usr/local/go/s
rc/runtime/asm_amd64.s:1357\
table `mt_order`.`order_lock_risk`"]
[2020/06/05 20:00:02.940 +08:00] [INFO] [syncer.go:257] ["write save point"] [ts=417122067683475511]
[2020/06/05 20:00:02.945 +08:00] [INFO] [syncer.go:249] ["handleSuccess quit"]
[2020/06/05 20:00:02.945 +08:00] [ERROR] [server.go:287] ["syncer exited abnormal"] [error="add to dsyncer, commit ts 417122070147629059: table `mt_order`.`order_lock_risk`: table not exist"] [errorVerbose="table not exist\
github.com/pin
gcap/tidb-binlog/pkg/loader.init\
\t/home/jenkins/agent/workspace/release_tidb_3.0/go/src/github.com/pingcap/tidb-binlog/pkg/loader/util.go:32\
runtime.doInit\
\t/usr/local/go/src/runtime/proc.go:5222\
runtime.doInit\
\t/usr/local/go/src/
runtime/proc.go:5217\
runtime.doInit\
\t/usr/local/go/src/runtime/proc.go:5217\
runtime.doInit\
\t/usr/local/go/src/runtime/proc.go:5217\
runtime.doInit\
\t/usr/local/go/src/runtime/proc.go:5217\
runtime.main\
\t/usr/local/go/src/runtime/
proc.go:190\
runtime.goexit\
\t/usr/local/go/src/runtime/asm_amd64.s:1357\
table `mt_order`.`order_lock_risk`\
add to dsyncer, commit ts 417122070147629059"]
[2020/06/05 20:00:02.946 +08:00] [INFO] [util.go:66] [Exit] [name=syncer]
[2020/06/05 20:00:02.946 +08:00] [INFO] [server.go:420] ["begin to close drainer server"]
[2020/06/05 20:00:02.950 +08:00] [INFO] [server.go:385] ["has already update status"] [id=bj-mtdb-tidb-dm-prd-001:8449]
[2020/06/05 20:00:02.950 +08:00] [INFO] [server.go:424] ["commit status done"]
[2020/06/05 20:00:02.950 +08:00] [INFO] [util.go:66] [Exit] [name=heartbeat]
[2020/06/05 20:00:02.950 +08:00] [INFO] [pump.go:77] ["pump is closing"] [id=bj-mtdb-tidb-dm-prd-001:8551]
[2020/06/05 20:00:02.950 +08:00] [INFO] [pump.go:77] ["pump is closing"] [id=bj-mtdb-tidb-dm-prd-002:8551]
[2020/06/05 20:00:02.950 +08:00] [INFO] [pump.go:77] ["pump is closing"] [id=bj-mtdb-tidb-dm-prd-003:8551]
[2020/06/05 20:00:02.950 +08:00] [INFO] [collector.go:133] ["publishBinlogs quit"]
[2020/06/05 20:00:02.950 +08:00] [INFO] [util.go:66] [Exit] [name=collect]
[2020/06/05 20:00:02.950 +08:00] [INFO] [merge.go:245] ["Merger is closed successfully"]
[2020/06/05 20:00:02.950 +08:00] [INFO] [main.go:73] ["drainer exit"]

方便的话,麻烦上传一下完整的 drainer.toml 配置文件以及 drainer 日志中最近一次 Welcome 开始的日志

确认一下 drainer 配置文件是否生效了

inventory.ini配置内容如下

[drainer_servers]
mt2bigdata ansible_host=192.168.17.5 drainer_port=8449 deploy_dir=/data/tidb/4200/drainer initial_commit_ts="417122067683475461"

drainer.toml 配置文件以及 drainer 日志 请参考附件

mt2bigdata_drainer.toml (4.2 KB)

drainer.log (10.6 KB)

感谢 ~

  1. 查看报错: [error=“table mt_order.order_lock_risk: table not exist”]
  2. 您的配置文件中配置了库 replicate-do-db = [“mt_prime”,“pt_report”,“pt_search”,“mt_coupon”,“mt_order”,“pt_order”,“pt_activity”,“pt_merchant”,“pt_goods”]
  3. 可以看到注释中的解释,会优先匹配do-db,所以就会匹配所有mt_order库
  4. 如果确认只同步这一个表,可以把do-db中的库取消掉
1 个赞

试了一下 ,果然是这个原因 ,感谢大佬 。

如果后续drainer下游需要新加表同步的话,是不是可以通过以下流程来实现呢? 帮确认下:

1: drainer上游库停止该新表业务写入

2: 在drainer上游库中备份该表数据并导入到drainer下游库中

3: drainer配置文件中增加该新表的过滤规则

4: 重启drainer服务

5: drainer上游开启该表业务写入

[[syncer.replicate-do-table]]
db-name ="库名"
tbl-name = "新表"

多谢 ~

  1. 理论上感觉可以,您可以测试一下,多谢。
  2. 一般建议再部署一个 drainer,多谢。

好的 我们测试下 :smiling_face_with_three_hearts:

可以记录下测试过程,分享出来,:grinning:

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