为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
-
【dm2.0 版本】:使用dm2.0,将mysql中得数据同步到tidb中,mysql中一个实例下有多个库,现需同步test库下面得分表testname[0-15],使用黑白名单方式对表数据进行同步,规则如下:
block-allow-list:
bw-rule-1:
do-dbs: [“test”]
do-tables:
- db-name: “test”
tbl-name: “testname[0-15]”
-
【问题描述】:虽然指定do-dbs 和do-tables ,此实例下其他库也会备份,这个能否只同步备份指定得库表数据
若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。
mysql 库中得部分库得部分表是没有主键,所以只想同步需要测试得库表(orderdb 指定得分表,详见配置文件do-tables列表),启动定时任务时,错误信息是因为部分表(此实例下得其他库得表)没有主键,指定了do-dbs,do-tables,不是应该只备份指定得库、表吗
----------- 全局配置 -----------
********* 基本信息配置 *********
name: yaya # 任务名称,需要全局唯一
is-sharding: true
task-mode: all # 任务模式,可设为 “full”、“incremental”、“all”
shard-mode: “pessimistic” # 如果为分库分表合并任务则需要配置该项。默认使用悲观协调模式 “pessimistic”,在深入了解乐观协调模式的原理和使用限制后,也可以设置为乐观协调模式 “optimistic”
ignore-checking-items: [] # 忽略的检测项,可包含 “all”、“dump_privilege”、“replication_privilege”、“version”、“binlog_enable”、“binlog_format”、“binlog_row_image”、“table_schema”、“schema_of_shard_tables”、“auto_increment_ID”
meta-schema: “dm_meta” # 下游储存 meta
信息的数据库
timezone: “Asia/Shanghai” # 时区
case-sensitive: false # schema/table 是否大小写敏感
online-ddl-scheme: “pt” # 目前仅支持 “gh-ost” 、“pt”
clean-dump-file: true # 是否清理 dump 阶段产生的文件,包括 metadata 文件、建库建表 SQL 文件以及数据导入 SQL 文件
target-database: # 下游数据库实例配置
host: “10.xx.xx.xx”
port: 4000
user: “mysql2tidb”
password: “*********” # 推荐使用经 dmctl 加密后的密码
max-allowed-packet: 67108864 # 设置 DM 内部连接 TiDB 服务器时,TiDB 客户端的 “max_allowed_packet” 限制(即接受的最大数据包限制),单位为字节,默认 67108864 (64 MB)
session:
tidb_skip_utf8_check: 1
tidb_constraint_check_in_place: 0
******** 功能配置集 **********
block-allow-list:
bw-rule-1:
do-dbs: [“orderdb”]
do-tables:
- db-name: “orderdb”
tbl-name: “order-item[0-15]”,“order-detail[0-15]”
mydumpers: # mydumper 处理单元运行配置参数
global: # 配置名称
threads: 4 # mydumper 从上游数据库实例导出数据的线程数量,默认值为 4
chunk-filesize: 64 # mydumper 生成的数据文件大小,默认值为 64,单位为 MB
skip-tz-utc: true # 忽略对时间类型数据进行时区转化,默认值为 true
extra-args: “–no-locks” # mydumper 的其他参数,不需要在 extra-args 中配置 table-list,DM 会自动生成
loaders: # loader 处理单元运行配置参数
global: # 配置名称
pool-size: 16 # loader 并发执行 mydumper 的 SQL 文件的线程数量,默认值为 16
dir: “./dumped_data” # loader 读取 mydumper 输出文件的地址,同实例对应的不同任务必须不同(mydumper 会根据这个地址输出 SQL 文件),默认值为 “./dumped_data”
syncers: # syncer 处理单元运行配置参数
global: # 配置名称
worker-count: 4 # syncer 并发迁移 binlog event 的线程数量,默认值为 16
batch: 100 # syncer 迁移到下游数据库的一个事务批次 SQL 语句数,默认值为 100
enable-ansi-quotes: true # 若 session
中设置 sql-mode: "ANSI_QUOTES"
,则需开启此项
safe-mode: false # 设置为 true,则将来自上游的 INSERT
改写为 REPLACE
,将 UPDATE
改写为 DELETE
与 REPLACE
,保证在表结构中存在主键或唯一索引的条件下迁移数据时可以重复导入 DML。在启动或恢复增量复制任务的前 5 分钟内 TiDB DM 会自动启动 safe mode
----------- 实例配置 -----------
mysql-instances:
source-id: "mysql-28" # 对应 source.toml 中的 `source-id`
meta: # `task-mode` 为 `incremental` 且下游数据库的 `checkpoint` 不存在时 binlog 迁移开始的位置; 如果 checkpoint 存在,则以 `checkpoint` 为准
binlog-name: binlog.000001
binlog-pos: 4
binlog-gtid: "03fc0263-28c7-11e7-a653-6c0b84d59f30:1-7041423,05474d3c-28c7-11e7-8352-203db246dd3d:1-170" # 对于 source 中指定了 `enable-gtid: true` 的增量任务,需要指定该值
mydumper-config-name: "global" # mydumper 配置名称
loader-config-name: "global" # loader 配置名称
syncer-config-name: "global" # Syncer 配置名称
小王同学
4
根据你这边 task 的配置,只是在 block-allow-list 中配置了 bw-rule-1 规则,但是没有在 mysql-instances 下引用该规则,因此导致 黑白名单过滤规则不生效。
需要在 mysql-instances 下面配置,可参考案例:https://github.com/pingcap/dm/blob/b6a6e585b8cc523fa406758c5fb2ef86801f4c89/dm/dm-ansible/conf/task_advanced.yaml.example#L32
的确是没引用,还是上面得配置文件,现在又有另一个问题,,我按照上面得配置启动task,使用query-status查看:{
“result”: true,
“msg”: “”,
“sources”: [
{
“result”: true,
“msg”: “”,
“sourceStatus”: {
“source”: “mysql-28”,
“worker”: “dm-10.52.xx.3-8262”,
“result”: null,
“relayStatus”: null
},
“subTaskStatus”: [
{
“name”: “yaya”,
“stage”: “Running”,
“unit”: “Sync”,
“result”: null,
“unresolvedDDLLockID”: “”,
“sync”: {
“totalEvents”: “0”,
“totalTps”: “0”,
“recentTps”: “0”,
“masterBinlog”: “(mybinlog.001368, 128781182)”,
“masterBinlogGtid”: “ce846d8c-35d5-11e9-8154-5254002ea820:1-207338812”,
“syncerBinlog”: “(mybinlog.001368, 128711278)”,
“syncerBinlogGtid”: “ce846d8c-35d5-11e9-8154-5254002ea820:1-207328868”,
“blockingDDLs”: [
],
“unresolvedGroups”: [
],
“synced”: false,
“binlogType”: “remote”
}
}
]
}
]
}
task-mode:指定为all,而且也配置了binlog信息,全量数据没同步到tidb中,(个人根据官方文档理解,task_mode不是incre,并且meta-data中没有相关信息,会按照先全量,后增量同步),现在数据全量没过来
小王同学
6
你好,是否可以提供 dm-worker 日志?从 query-status 中可以看到,当前已经是进入到 sync 增量同步阶段了。
猜测你这边是否多次执行 start-task? 如果之前导入导致同步任务已经进入增量同步阶段,那么重启任务会从断点位置开始继续同步。重新进行任务同步是需要清理下游数据信息以及 checkpoint 信息。
如非上述猜测导致,麻烦提供下 dm-worker.log 日志,辛苦。
“=0]
[2020/09/16 15:10:47.583 +08:00] [INFO] [syncer.go:2274] [“binlog replication status”] [task=yaya] [unit=“binlog replication”] [total_events=0] [total_tps=0] [tps=0] [master_position=”(mybinlog.001368, 425447185)“] [master_gtid=ce846d8c-35d5-11e9-8154-5254002ea820:1-207348596] [checkpoint=“position: (mybinlog.001368, 425447185), gtid-set: ce846d8c-35d5-11e9-8154-5254002ea820:1-207328868(flushed position: (mybinlog.001368, 425427351), gtid-set: ce846d8c-35d5-11e9-8154-5254002ea820:1-207328868)”]
[2020/09/16 15:11:00.188 +08:00] [INFO] [syncer.go:873] [“flush checkpoints except for these tables”] [task=yaya] [unit=“binlog replication”] [tables=”“]
[2020/09/16 15:11:00.188 +08:00] [INFO] [syncer.go:876] [“prepare flush sqls”] [task=yaya] [unit=“binlog replication”] [“shard meta sqls”=”“] [“shard meta arguments”=”“]
[2020/09/16 15:11:00.208 +08:00] [INFO] [syncer.go:885] [“flushed checkpoint”] [task=yaya] [unit=“binlog replication”] [checkpoint=“position: (mybinlog.001368, 425453831), gtid-set: ce846d8c-35d5-11e9-8154-5254002ea820:1-207328868(flushed position: (mybinlog.001368, 425453831), gtid-set: ce846d8c-35d5-11e9-8154-5254002ea820:1-207328868)”]
[2020/09/16 15:11:17.551 +08:00] [INFO] [syncer.go:2249] [“binlog replication progress”] [task=yaya] [unit=“binlog replication”] [“total binlog size”=11867173] [“last binlog size”=10717023] [“cost time”=30] [bytes/Second=38338] [“unsynced binlog size”=0] [“estimate time to catch up”=0]
[2020/09/16 15:11:17.583 +08:00] [INFO] [syncer.go:2274] [“binlog replication status”] [task=yaya] [unit=“binlog replication”] [total_events=0] [total_tps=0] [tps=0] [master_position=”(mybinlog.001368, 426597335)“] [master_gtid=ce846d8c-35d5-11e9-8154-5254002ea820:1-207348628] [checkpoint=“position: (mybinlog.001368, 426597335), gtid-set: ce846d8c-35d5-11e9-8154-5254002ea820:1-207328868(flushed position: (mybinlog.001368, 425453831), gtid-set: ce846d8c-35d5-11e9-8154-5254002ea820:1-207328868)”]
[2020/09/16 15:11:30.591 +08:00] [INFO] [syncer.go:873] [“flush checkpoints except for these tables”] [task=yaya] [unit=“binlog replication”] [tables=”“]
[2020/09/16 15:11:30.591 +08:00] [INFO] [syncer.go:876] [“prepare flush sqls”] [task=yaya] [unit=“binlog replication”] [“shard meta sqls”=”“] [“shard meta arguments”=”"]
[2020/09/16 15:11:30.696 +08:00] [INFO] [syncer.go:885] [“flushed checkpoint”] [task=yaya] [unit=“binlog replication”] [checkpoint=“position: (mybinlog.001368, 426615816), gtid-set: ce846d8c-35d5-11e9-8154-5254002ea820:1-207328868(flushed position: (mybinlog.001368, 426615816), gtid-set: ce846d8c-35d5-11e9-8154-5254002ea820:1-207328868)”]
[2020/09/16 15:11:47.551 +08:00] [INFO] [syncer.go:2249] [“binlog replication progress”] [task=yaya] [unit=“binlog replication”] [“total binlog size”=11905020] [“last binlog size”=11867173] [“cost time”=30] [bytes/Second=1261] [“unsynced binlog size”=0] [“estimate time to catch up”=0]
日志显示正在进行增量同步,但是全量同步数据并没有,有以下几个疑问
1、把meta中得数据信息删掉,停掉此任务,重新启动此任务,同步数据任务是不是会重新同步(增量+全量),还是需要做其他得操作,
2,一个库中有多个表得分表order-tab[0-15],order-detal[0-15],这样数据同步得时候,多个分表怎么写类似: ,这样是否
- db-name: “order-db”
tbl-name: “ordertab[0-15]”, “orderdetail[0-15]”
小王同学
8
写法有问题,不能这样写。参考官网 tbl-name 处分开写。
do-tables:
- db-name: "test[123]" # 匹配 test1、test2、test3。
tbl-name: "t[1-5]" # 匹配 t1、t2、t3、t4、t5。
- db-name: "test"
tbl-name: "t"
system
(system)
关闭
11
此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。