开发者社区> 问答> 正文

canal解析出的binlog文件名有乱码,导致otter重启后就再也无法定位日志位置

tu4.png

MysqlEventParser.java中的findStartPosition返回的文件名是mysql-bin.000008, 是正常的。 后续开始dump数据,上图解析出来的CanalEntry返回的的日志文件中就存在乱码。 由于canal返回的日志文件名存在乱码,保存在zookeeper中的日志文件名称也存在乱码,从而在otter node重启后无法定位日志,谢谢

otter 4.2.15 canal 1.0.25 这个会跟数据库的字符集类型有关系吗?目前我使用的数据库字符集是UTF-8

通过进一步去调试,我发现我的问题原因是在主备切换时,回退一个时间窗根据时间戳来定位binlog的startPostion时,获取到的entryPosition对象里的journalName就已经乱码了,导致后续去dump时就会出问题。 猜测会不会是特定版本的canal问题,我又进一步拉取了canal1.0.23和canal1.0.25进一步单元测试发现canal1.0.25版本不会有这个问题,而canal1.0.23,调试结果如下: tu5.png

备注:我使用的mysql版本为 5.7.19

原提问者GitHub用户 lbj2016

展开
收起
古拉古拉 2023-06-18 10:23:37 119 0
2 条回答
写回答
取消 提交回答
  • 随心分享,欢迎友善交流讨论:)

    如果 Canal 解析出的 binlog 文件名出现乱码,可能会导致 Otter 无法定位日志位置,从而无法继续进行数据同步。这种情况通常是由于 Canal 的配置不正确或者 Canal 本身存在 bug 导致的。

    为了解决这个问题,可以尝试以下几个方法:

    检查 Canal 的配置信息。您可以检查 Canal 的配置信息,例如字符集、编码、文件命名规则等,以确定是否存在错误或者不一致。如果 Canal 的配置信息有误,可以尝试修复或者调整相关的配置信息。

    检查 Canal 的版本。您可以检查 Canal 的版本,并查看是否存在已知的 bug。如果 Canal 的版本存在 bug,可以尝试升级或者降级 Canal 的版本,以解决问题。

    尝试手动重命名 binlog 文件。如果 Canal 解析出的 binlog 文件名出现乱码,可以尝试手动重命名文件,并将重命名后的文件名传递给 Otter,以克服这个问题。在重命名文件时,需要确保文件名符合 Otter 的命名规则,并且不会影响数据同步的正确性。

    尝试使用其他工具定位日志位置。如果 Otter 无法定位日志位置,可以尝试使用其他工具来查找和定位日志位置。例如,您可以使用 MySQL 自带的 binlog 文件查看工具,来查找和定位日志位置。在使用其他工具时,需要确保数据同步的正确性,并及时更新 Otter 的同步位置信息。

    需要注意的是,在处理 Canal 解析出的 binlog 文件名乱码问题时,需要谨慎处理,以避免出现数据同步错误和数据丢失等问题。同时,建议定期备份数据,并对数据同步进行监控和维护,以保证数据同步的可靠性和稳定性。

    2023-06-30 17:42:17
    赞同 展开评论 打赏
  • 最新的canal1.1.2修复了

    原回答者GitHub用户 agapple

    2023-06-18 11:00:07
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
PolarDB-X 2.0 全局 Binlog 与备份恢复能 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载