DM全量+增量同步报错

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

  • 【TiDB 版本】:v4.0.8 DM V2.0
  • 【问题描述】:源数据从mysql8.0.14全量+增量同步数据到TiDB集群中,全量同步完之后报错,现在无法实时同步数据。错误如下所示,ERROR 1236 (HY000): Could not find first log file name in binary log index file,请问要如何操作呢?

[root@localhost soft]# tiup dmctl --master-addr 192.168.137.135:8261 query-status mediamz
Starting component dmctl: /root/.tiup/components/dmctl/v2.0.0/dmctl/dmctl --master-addr 192.168.137.135:8261 query-status mediamz
{
“result”: true,
“msg”: “”,
“sources”: [
{
“result”: true,
“msg”: “”,
“sourceStatus”: {
“source”: “mysql-replica-01”,
“worker”: “dm-192.168.137.135-8262”,
“result”: null,
“relayStatus”: null
},
“subTaskStatus”: [
{
“name”: “mediamz”,
“stage”: “Paused”,
“unit”: “Sync”,
“result”: {
“isCanceled”: false,
“errors”: [
{
“ErrCode”: 50000,
“ErrClass”: “not-set”,
“ErrScope”: “not-set”,
“ErrLevel”: “high”,
“Message”: “ERROR 1236 (HY000): Could not find first log file name in binary log index file”,
“RawCause”: “”,
“Workaround”: “”
}
],
“detail”: null
},
“unresolvedDDLLockID”: “”,
“sync”: {
“totalEvents”: “0”,
“totalTps”: “0”,
“recentTps”: “0”,
“masterBinlog”: “(binlog.000001, 3532)”,
“masterBinlogGtid”: “”,
“syncerBinlog”: “(binlog.000001, 3532)”,
“syncerBinlogGtid”: “”,
“blockingDDLs”: [
],
“unresolvedGroups”: [
],
“synced”: true,
“binlogType”: “remote”
}
}
]
}
]
}

任务配置文件:dm-task.yaml (1.6 KB)

日志文件:dm-worker (2).log (41.8 KB)

类似的报错可以先搜索下看是否有思路

修改 inventory.ini 中 relay_binlog_name,我这边的dm版本找不到这个配置文件怎么办?

麻烦提供下详细的 DM 版本,确认下部署方式是 TiUP 还是 ansible 部署?

DM 2.0.0 暂时还没有 relay_log 的功能。

应该是全量导入时间较长,上游binlog文件被清理了,可以修改 MySQL expire_logs_days 变量,重新导入

DM v2.0.0,tiup部署方式,如果DM 2.0.0 暂时还没有 relay_log 的功能,我这个错误该如何处理呢?

我的mysql数据库版本是8.0.17,没有expire_logs_days 变量了,只有binlog_expire_logs_seconds变量,设置binlog_expire_logs_seconds为3天后,重新导入还是一样的报错。

mysql 里执行 show binlog events 和 show master status 会报错吗

mysql> show binlog events;
Error when executing command SHOW BINLOG EVENTS: Could not find target log
第一个命令报错,

后面的命令可以
mysql> show master status;
±--------------±---------±-------------±-----------------±------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
±--------------±---------±-------------±-----------------±------------------+
| binlog.000002 | 155 | | | |
±--------------±---------±-------------±-----------------±------------------+
1 row in set (0.02 sec)

应该是上游 MySQL binlog.index 文件错误了,可参考 https://dba.stackexchange.com/questions/139131/error-1236-could-not-find-first-log-file-name-in-binary-log-index-file
上游执行

PURGE BINARY LOGS TO 'binlog.000002';

再执行 show binlog events 看是否报错

mysql> PURGE BINARY LOGS TO ‘binlog.000002’;
1373 - Target log not found in binlog index

执行报错,提示找不到日志文件。

可以修改 binlog.index 文件,将binlog.000002添加进去

1 个赞

修改后,终于可以实现数据实时同步了,非常感谢:+1:

:+1::+1::+1:

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