AWS RDS MySQL主用户无数据导入权限,授权失败如何解决?
解决AWS RDS MySQL导入SQL时的权限报错问题
核心原因
AWS RDS的主用户(比如你用的admin)并非MySQL原生root用户,无法获取SUPER权限,也不能给其他用户授予SUPER权限——这是AWS的权限限制,和你有没有GRANT OPTION无关。报错的根源是你的SQL导出文件里包含了需要SUPER权限的操作,比如修改全局系统变量、带DEFINER的对象创建语句。
具体解决方案
1. 排查并修改SQL文件中的问题语句
打开你的.sql导出文件,找到以下两类语句并修改:
- 全局变量设置语句:比如
SET GLOBAL sql_mode = '...'或SET @@global.xxx = ...- 把
GLOBAL改成SESSION,比如SET SESSION sql_mode = '...',因为RDS主用户有权限修改会话级变量;如果该变量不是导入必须的,直接删除也可以。
- 把
- 带DEFINER的创建语句:比如
CREATE DEFINER=root@localhostPROCEDURE ...- 删掉
DEFINER=xxx@xxx这部分,或者替换成你的RDS主用户`DEFINER=`admin`@`%。
- 删掉
2. 调整导入方式(可选,无需修改SQL文件)
如果不想编辑SQL文件,可通过MySQL命令行工具导入,同时指定会话级变量:
mysql -h your-rds-endpoint -u admin -p --init-command="SET SESSION sql_mode='你的会话变量值'" < your-dump-file.sql
替换your-rds-endpoint为你的RDS实例端点,your-dump-file.sql为你的导出文件路径。
3. 重新导出SQL文件(从源头避免问题)
如果可以重新导出,在MySQL Workbench里做以下设置:
- 导出时进入Advanced选项卡,取消勾选
Include CREATE DEFINER; - 确保导出的SQL中没有
SET GLOBAL类的语句。
内容的提问来源于stack exchange,提问作者Nathan Tew
相关产品推荐
相关产品推荐

