三方客户端Canal链接RDS获取binlog错位问题
问题现象
使用三方客户端canal链接云上RDS for mysql 获取binlog来同步数据,canal提示Received error packet: errno = 1236, sqlstate = HY000 errmsg = Could not find first log file name in binary log index file。详细日志可以看到是 mysql-bin.002472这个binlog获取不到。
排查思路
一般数据库的客户端连接数据库进行增删改查,而canal是要获取binlog,基于数据库增量日志解析,提供增量数据订阅&消费。(不熟悉的客户端如canal,可以通过搜索引擎搜索关键字如canal查询)
客户端canal日志提示“获取的binlog名去找实际的binlog文件时找不到”。则从服务端rds本身先排查binlog名(mysql-bin.index里面)和实际datadir下的binlog文件是否能对应上,如果能对应上,那可以定界是客户端的问题。
定界为客户端的问题后,若对三方客户端工具不了解,请求助三方专业渠道或参考搜索引擎等网络上案例自行排查。
问题排查
1、登录DAS,查看RDS侧的binlog最新日志
2、或链接目标数据库,执行 mysql> show binary logs;
3、或在控制台 实例详情中备份恢复页面查看
4、如果此文件列表在canal日志报错中,则定界是RDS服务问题,如果没有则定界是客户端问题。此案例即为canal客户端缓存的binlog列表为老旧列表,需删除列表后重启canal服务。
排查结论
Canal客户端缓存的binlog列表为老旧列表,需删除列表后重启canal服务。由于要同步的位置都记录在元数据文件meta.dat文件中,如果此时重启Canal服务,还是会出现同样的问题,找不到binlog文件,要做的就是先备份原来的meta.dat(换名称后备份),停掉Canal服务,删除meta.dat文件,再次重启Canal,业务数据即可恢复正常。
- 点赞
- 收藏
- 关注作者
评论(0)