Debezium指定binlog位置初始化异常排查修复

本文详细介绍了在使用Debezium与Flink集成过程中遇到的binlog读取异常问题。当配置FileDatabaseHistory时,系统无法识别schema导致错误。通过日志分析,发现在schema_only_recovery模式下,FileDatabaseHistory缺少必要的初始化步骤,而FlinkDatabaseHistory则能正确执行。问题根源在于snapshottingTask.shouldSkipSnapshot()的逻辑,进一步发现FileDatabaseHistory的schema初始化未执行。最终,通过对比和调试,提出了修复方案,即修改exists方法的判断条件,确保正确执行初始化。

异常现象

最近项目需要使用Debezium指定binlog位置读取数据,当配置FileDatabaseHistory 保存offset就会出现无法识别schema异常。

14:52:18.237 [blc-9.135.12.10:3307] ERROR io.debezium.connector.mysql.MySqlStreamingChangeEventSource - Encountered change event 'Event{header=EventHeaderV4{timestamp=1652710509000, eventType=TABLE_MAP, serverId=123454, headerLength=19, dataLength=30, nextPosition=5761, flags=0}, data=TableMapEventData{tableId=375, database='etl', table='test', columnTypes=3, 15, columnMetadata=0, 64, columnNullability={0, 1}, eventMetadata=null}}' at offset {
   
   transaction_id=null, file=mysql-bin.000001, pos=5641, server_id=123454, event=1} for table etl.test whose schema isn't known to this connector. One possible cause is an incomplete database history topic. Take a new snapshot in this case.
Use the mysqlbinlog tool to view the problematic event: mysqlbinlog --start-position=5712 --stop-position=5761 --verbose mysql-bin.000001
14:52:18.237 [blc-9.135.12.10:3307] ERROR io.debezium.connector.mysql.MySqlStreamingChangeEventSource - Error during binlog processing. Last offset stored = {
   
   transaction_id=null, file=mysql-bin.000001, pos=5641
读取 binlog 时出错通常表示在指定 binlog 文件名和/或初始位置时存在问题。binlogMySQL 数据库中用于记录数据库变化的二进制日志文件。下面是一些可能导致该错误的原因和解决方法。 首先,确保正确指定binlog 文件名和初始位置。在使用 MySQL 自带的 mysqldump 命令时,可以通过使用参数 "--master-data" 来获取包含 binlog 文件名和初始位置的备份文件。 其次,确认指定binlog 文件名存在于正确的目录中。在 MySQL 中,binlog 文件通常存储在数据目录中的一个子目录中。可以通过查看 MySQL 配置文件中的 "log_bin" 参数来确定 binlog 文件的存储位置。如果路径不正确,可以通过修改配置文件并重新启动 MySQL 服务来解决。 另外,确保指定的初始位置binlog 文件中存在。binlog 文件会记录数据库中每个事务的详细变化,包括开始和结束位置。如果初始位置超过了 binlog 文件的范围,那么会导致读取错误。可以通过查看备份文件或使用 SHOW BINLOG EVENTS 命令来获取当前 binlog 文件的起始位置。 此外,还应检查 binlog 文件的文件权限。确保 MySQL 进程有权限读取和写入 binlog 文件。 最后,如果以上步骤都没有解决问题,可能需要考虑重新生成新的 binlog 文件。可以通过使用 RESET MASTER 命令来删除当前的 binlog 文件并重新开始记录。 总之,当读取 binlog 时出错,需要检查指定binlog 文件名和初始位置是否正确,确认文件的存储位置和权限,并考虑重新启动生成新的 binlog 文件。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值