AWS Redshift基于MySQL RDS创建EXTERNAL_SCHEMA查询报错25350求助
Redshift MySQL外部Schema报错25350解决方案
完整报错信息:
error: Table may not exist or is unsupported relation type
code: 25350
context: query: 0
location: mysqlclient.cpp:255
process: padbmaster [pid=15091]
触发报错的核心原因
该报错本质是Redshift联邦查询访问MySQL RDS时,无法识别目标表的元数据或无访问权限,和增强VPC开启状态无直接关联的常见场景占90%以上。
可行解决方案(按排查优先级排序)
- 检查外部Schema创建参数是否正确:创建语句必须指定和RDS侧一致的数据库名作为SCHEMA参数,未指定的情况下Redshift会默认访问MySQL的
test库,导致表不存在报错。参考标准创建语句:
CREATE EXTERNAL SCHEMA <自定义外部schema名称> FROM MYSQL DATABASE '<RDS实例的数据库名>' SCHEMA '<RDS实例的数据库名>' -- MySQL中schema等价于database,此处和上面DATABASE参数值一致 URI '<RDS实例内网端点>' PORT 3306 IAM_ROLE '<具备Secret访问权限的IAM角色ARN>' SECRET_ARN '<存储RDS凭证的Secret ARN>' OPTIONS (lower_case_table_names '1'); -- 适配MySQL默认大小写不敏感配置
- 验证目标表类型与存储引擎:仅MySQL InnoDB引擎的普通基础表 支持Redshift联邦查询,视图、临时表、系统表、MyISAM/MEMORY等其他存储引擎的表都会触发该报错。
- 检查RDS账号权限:确认Secret中存储的MySQL账号,已经被授予目标表的
SELECT权限,可在RDS侧执行命令验证:SHOW GRANTS FOR '<Secret中存储的MySQL用户名>'@'%';
如无权限,执行以下命令授权:GRANT SELECT ON <RDS库名>.<目标表名> TO '<MySQL用户名>'@'%'; - 排查不支持的数据类型:如果目标表包含Redshift不支持的MySQL字段类型(包括
JSON、GEOMETRY、BIT、TINYINT UNSIGNED等)也会触发该报错,可在MySQL侧创建仅包含兼容字段的视图,再通过外部Schema查询视图,或升级Redshift集群到最新小版本适配更多字段类型。 - 特殊字符/关键字适配:如果表名、字段名是Redshift保留关键字,或包含空格、特殊符号,查询时需要用双引号包裹对象名,示例:
SELECT * FROM <外部schema名>."order"; - 验证网络访问规则:确认Redshift集群安全组的出站规则开放3306端口到RDS所在VPC网段,RDS实例安全组的入站规则开放3306端口给Redshift集群的安全组。
内容的提问来源于stack exchange,提问作者Zubair_mirza
相关产品推荐
相关产品推荐

