ryans
2021 年10 月 9 日 11:10
1
【 DM 使用环境】
v2.0.6
【场景概述】
N天前:添加了上游数据源A,并且使用A数据源启动同步任务a,同步部分表
现在:在之前基础上,新增任务,使用A数据源启动同步任务b,同步部分表
旧任务无异常
新添加的任务报错:get binlog event error: ERROR 1236 (HY000): Could not find first log file name in binary log index file
【问题】
我想要了解下DM的数据源管理机制。
1、对于同一个数据源A,若添加多个任务,那么会重复拉取多次binlog吗?
还是说配置的一个数据源A来负责拉取binlog和全量数据,其他任务都是由数据源A来分发
2、这个获取get binlog event error,是指的上游mysql的binlog删除了,还是数据源A缓存的资源被删除了导致获取不到?
3、如果用一个数据源A,我配置了多个,例如10个以上的任务,是否会导致上游mysql压力过大?
2 个赞
qizheng
(qizheng)
2021 年10 月 9 日 13:07
2
2 个赞
ryans
2021 年10 月 11 日 03:22
3
你好,我已经阅读了该文档,但是疑问仍未解决
例如,对于同一个数据源,时间点A已运行10个sync任务,若后续时间点B中途加入新的sync任务,那么新任务默认全量+增量同步的位置,是从A点处开始,还是从B处开始。
如果是从B处开始的话,那么无法拉取到binlog这一异常不应该存在,这似乎不是relay log的问题。
还是说,对于配置的同一上游数据源,即使未开启dm relay log,添加多个任务时依旧会尝试从relay log拉取binlog,导致错误?
我认为正常情况,如果未开启relay log,dm的每个任务应该都会独立作为一个slave去拉取binlog?
2 个赞
qizheng
(qizheng)
2021 年10 月 11 日 08:21
4
新增同步任务b的步骤是什么样的,新增其他任务这个报错还能不能复现
2 个赞
ryans
2021 年10 月 12 日 03:31
5
DM工具均为默认配置,未主动操作开启relay log
详细操作步骤:
1、添加数据源A到DM
2、为数据源A开启同步任务a,过滤条件为mysql_tidb_test_db库,100张student_tab_xxx分表。目标为下游TiDB集群tidb_test_db库的student_tab表
3、等待N日
4、为数据源A开启同步任务b,过滤条件为mysql_tidb_test_db库,t1表。目标为下游TiDB集群tidb_test_db库的t1表。
开启任务后,a任务一直正常运行,b任务报错get binlog event error: ERROR 1236 (HY000): Could not find first log file name in binary log index file。
可复现
1 个赞
qizheng
(qizheng)
2021 年10 月 12 日 06:30
6
可以在日志或者 query-status 确认当前 task 报错的 binlog 位置,然后检查上游 mysql 对应的 binlog 及在 binlog.index 中是否存在
1 个赞
Meditator
(Wendywong020)
2021 年10 月 13 日 06:18
7
dm配置中,一个task中可以配置一个或者多个数据源,一个数据源对应一个worker,一个worker在上游mysql实例就是一个伪装的slave实例(show processlist 查看),每个伪装slave单独去拉取binlog,可以得出不同task中binlog不会共享,因为不同的task指定的数据源即便相同,在上游也有几个伪装slave。
1 个赞
ryans
2021 年10 月 14 日 07:00
8
你好,经过测试,我发现问题在于,我的这个任务并不会读取最新binlog,而是读取很久以前的binlog,该binlog已经上游数据源被删除。而新增的其他任务,则可以获取到最新binlog
我尝试过如下措施,依旧失败,我不知道为何该任务依旧尝试读旧binlog。我认为他此时应该存量同步最新数据,再拉取最新binlog:
1、stop-task停止任务
2、检查relaylog,发现relaylog未开启,故不作清理
3、清理TiDB相关表数据
4、start-task开启任务
配置如下
---
name: testdm
task-mode: all
target-database:
host: "xxx"
port: xxx
user: "xxx"
password: "xxx"
mysql-instances:
- source-id: "mysql-test-01"
block-allow-list: "ba-rule1"
block-allow-list:
ba-rule1:
do-tables:
- db-name: "recon_tidb_test_db"
tbl-name: "t1"
报错
"subTaskStatus": [
{
"name": "testdm",
"stage": "Paused",
"unit": "Sync",
"result": {
"isCanceled": false,
"errors": [
{
"ErrCode": 36069,
"ErrClass": "sync-unit",
"ErrScope": "upstream",
"ErrLevel": "high",
"Message": "get binlog event error: ERROR 1236 (HY000): Could not find first log file name in binary log index file",
"RawCause": "",
"Workaround": "Please check if the binlog file could be parsed by `mysqlbinlog`."
}
],
"detail": null
},
"unresolvedDDLLockID": "",
"sync": {
"totalEvents": "0",
"totalTps": "0",
"recentTps": "0",
"masterBinlog": "(mysql-bin.007306, 698340072)",
"masterBinlogGtid": "369ad544-3750-11ea-8dbe-924bb9f1abfb:558974463-558988345:558988347-1429798087,3fac809d-dd86-11eb-b746-82833076e3c1:1-1368006336",
"syncerBinlog": "(mysql-bin.005558, 99468277)",
"syncerBinlogGtid": "",
"blockingDDLs": [
],
"unresolvedGroups": [
],
"synced": false,
"binlogType": "remote",
"secondsBehindMaster": "0"
}
}
]
1 个赞
qizheng
(qizheng)
2021 年10 月 14 日 07:27
9
上面记录 syncerBinlog 可能有点问题,这个表示 DM 已经处理完成的 binlog event 对应的 binlog 和 position,检查下游 {dm_meta}
库中的 {task-name}_syncer_checkpoint
记录的 binlog 是不是正确,在做完全量数据导入后这个表有没有更新过
1 个赞
ryans
2021 年10 月 14 日 08:11
10
你好,我发现dm_meta表中,无论我stop-task和start-task多少次,testdm_loader_checkpoint,testdm_syncer_checkpoint没有任何数据更新,依旧停留在很久以前的数据记录上。
在我删除这两张表后再次start-task,任务就正常了
1 个赞
qizheng
(qizheng)
2021 年10 月 15 日 01:45
11
system
(system)
关闭
2022 年10 月 31 日 19:17
12
此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。