Airflow使用S3ToMySqlOperator导S3数据到AWS RDS MySQL权限报错问询
问题解决思路
1. 先解决GRANT语句语法报错问题
你遇到的语法报错有两个直接原因:
- MySQL 8.0 已经废弃了
GRANT语句中携带IDENTIFIED BY的写法,用户创建和权限授予已经拆分为两个独立操作,不能合并执行 - 你写的SQL语句中密码末尾的引号是中文全角引号
’,不是英文半角引号',也会触发语法错误
另外补充一个核心限制:AWS RDS 是托管MySQL服务,官方不允许给任何账号授予FILE权限,即使语法写对也不可能授权成功,不用在这个方向继续尝试。
2. 解决原始的2068报错问题
你最初推测是缺少FILE权限属于误判,LOAD DATA LOCAL INFILE是读取客户端(也就是Airflow调度节点)本地的临时文件,不需要MySQL服务端的FILE权限。报错的核心原因是本地加载文件的开关没开,按以下步骤调整即可:
- 第一步:修改RDS MySQL的参数组配置,将
local_infile参数的值设置为1,修改后重启RDS实例生效 - 第二步:修改Airflow中你配置的
sql_conn_id连接的Extra参数,添加{"local_infile": true},允许连接使用本地文件加载功能 - 第三步:给你的admin账号授予对应库表的写入权限,执行以下SQL:
GRANT ALL PRIVILEGES ON housing_project_db.* TO 'admin'@'%'; FLUSH PRIVILEGES;
3. 备选兜底方案
如果调整后S3ToMySqlOperator仍然无法正常运行,可以替换实现逻辑绕开LOAD DATA限制:
自定义PythonOperator,先通过S3 Hook读取目标csv文件内容,再通过MySQL Hook批量写入目标表,不需要依赖LOAD DATA能力,兼容性更强。
内容的提问来源于stack exchange,提问作者Josh
相关产品推荐
相关产品推荐

