Flink CDC创建表之后,再查询就报这个错是为什么?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在使用Flink CDC创建表后,查询时出现错误可能与以下几个原因相关。以下是详细的分析和解决方案:
如果在Flink CDC全量阶段发生了表结构变更(例如新增列、修改列类型等),可能会导致作业报错或无法同步表结构变更。
如果使用的数据库用户没有足够的权限访问表或执行某些操作,也可能导致查询失败。
DELETE command denied to user 'userName'@'*.*.*.*' for table 'table_name'sub account not auth permissionDELETE权限的操作(如CDC流结合WHERE条件过滤时,UPDATE_BEFORE会被识别为DELETE操作)。SELECT:用于读取表数据。REPLICATION SLAVE 和 REPLICATION CLIENT:用于读取Binlog。DELETE:如果存在UPDATE_BEFORE或DELETE操作。如果MySQL服务器上的Binlog被清理或配置不当,也可能导致查询失败。
The connector is trying to read binlog starting at GTIDs ..., but this is no longer available on the serverEncountered change event for table xxx.xxx whose schema isn't known to this connectorBinlog_Do_DB或Binlog_Ignore_DB)忽略了某些库的Binlog。SHOW VARIABLES LIKE 'expire_logs_days';
SET GLOBAL expire_logs_days=7;
SHOW MASTER STATUS;
确保目标库未被Binlog_Ignore_DB忽略,且Binlog_Do_DB包含目标库。
如果Flink CDC无法解析表的Schema,也可能导致查询失败。
Encountered change event for table xxx.xxx whose schema isn't known to this connectorThe "before" field of UPDATE/DELETE message is nulldebezium.snapshot.mode='never',导致从Binlog开头读取数据,但Binlog中的Schema与当前表的Schema不匹配。DEFAULT (now()))。debezium.snapshot.mode='never',可以通过以下参数避免报错:
debezium.inconsistent.schema.handling.mode = 'warn'
io.debezium.connector.mysql.MySqlSchema WARN的详细信息,定位无法解析的变更,并根据提示调整表结构。如果表未定义主键,且启用了增量快照功能(scan.incremental.snapshot.enabled),也会导致查询失败。
The primary key is necessary when enable 'Key: 'scan.incremental.snapshot.enabled'在DDL中为表添加主键(Primary Key)信息。例如:
CREATE TABLE your_table (
id INT PRIMARY KEY,
name STRING
) WITH (
'connector' = 'mysql-cdc',
...
);
table.exec.source.cdc-events-duplicate=true,并在源表上定义主键以去重。根据上述分析,建议按照以下步骤排查问题: 1. 检查是否有表结构变更,并按需重新同步表数据。 2. 确保数据库用户具有足够的权限。 3. 调整Binlog保留时间和过滤器配置。 4. 检查Schema是否匹配,必要时重新生成快照。 5. 确保表定义中包含主键信息。
如果问题仍未解决,请提供具体的报错信息以便进一步分析。