flink sql join操作,source 是mysql,sink也是mysql,主表数据量600万以上,其他left join表在20万,任务启动不久报:Caused by: com.github.shyiko.mysql.binlog.network.ServerException: The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs containing GTIDs that the slave requires.
运行一段时间报;Caused by: java.lang.IllegalStateException: The connector is trying to read binlog starting at Struct{version=1.9.7.Final,connector=mysql,name=mysql_binlog_source,ts_ms=1698804372399,db=,server_id=0,file=mysql-bin.000534,pos=1043420736,row=0}, but this is no longer available on the server. Reconfigure the connector to use a snapshot when needed.
请问咋解决?
根据错误信息提示,第一个错误是因为slave试图使用CHANGE MASTER TO MASTER_AUTO_POSITION = 1连接master,但是master已经删除了包含slave需要的GTID的二进制日志。
第二个错误是因为connector尝试从binlog读取数据时发现这个位置的数据不再服务器上,可能是因为服务器清理了旧的日志文件。这种情况下,你可以重新配置connector使用快照进行同步。
解决方法如下:
示例配置:
connector:
name: mysql-source
connection-url: jdbc:mysql://localhost:3306/mydatabase?useSSL=false&serverTimezone=UTC
username: root
password: my-secret-pw
table.whitelist: db_1.public.my_table
mode: incremental
snapshot-mode: when_needed
database.history.kafka.bootstrap.servers: localhost:9092
database.history.kafka.topic: debezium.history.mysql
注意:请将上述配置中的数据库URL、用户名、密码等替换为你实际的配置。同时,你也需要确保你的Kafka集群可以正常工作。
这个错误信息表明,Flink CDC连接器正在尝试从MySQL服务器读取二进制日志,但是服务器上的某些GTID已经被清除,因此连接器无法找到这些GTID。这可能是由于以下原因导致的:
为了解决这个问题,你可以尝试以下步骤:
在Flink CDC连接器的配置中,将master_auto_position
设置为false
。这样,连接器将不会自动定位到MySQL服务器上的最新GTID,而是需要手动指定。
使用SHOW BINARY LOGS;
命令查看MySQL服务器上的二进制日志列表。找到包含所需GTID的二进制日志文件,并将其路径添加到Flink CDC连接器的配置中。
如果可能的话,确保MySQL服务器上的二进制日志文件不会被意外地删除或过期。你可以通过修改MySQL的配置来延长二进制日志文件的保留时间。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。