问题描述
在创建存储过程、函数、触发器、事件、视图的时候出现如下错误。
向RDS导入SQL脚本文件(通常为本地数据库SQL脚本文件)的时候出现以下错误。
从RDS MySQL实例下载逻辑备份,导入到RDS或本地数据库中,出现如下错误,错误代码为1227和1725。
执行MySQL语句修改参数时,出现如下错误。
[Err] 1227 - Access denied; you need (at least one of) the SUPER privilege(s) for this operation
ERROR 1725 (HY000) at line 1936: OPERATION need to be executed set by ADMIN
ERROR 1227 (42000) at line 2984: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
问题原因
数据导入RDS MySQL实例时,SQL语句中含有需要Super权限的用户才可以执行的SQL语句(如
DEFINER
、GTID_PURGED
等),而RDS MySQL不提供Super权限,因此需要删除这类语句。本地MySQL实例没有启用GTID。
因数据库账号权限不足,无法通过执行MySQL语句修改部分参数(例如SET GLOBAL event_scheduler = 1)。
解决方案
使用高权限账号将数据导入RDS中,如果您本人无权限操作账号,请联系您的管理员。
在待导入的SQL脚本中删除DEFINER相关语句。
检查SQL文件,删除类似以下SQL语句。
DEFINER=`root`@`%`
在Linux系统中,可以尝试使用以下命令删除。
sed -ie 's/DEFINER[ ]*=[ ]*[^ ]*/ / ' your.sql
在待导入的SQL脚本中删除GTID_PURGED相关语句。
从本地数据库导出数据时,您可以在
mysqldump
命令后添加参数--set-gtid-purged=off
来取消输出GTID_PURGED子句。检查SQL文件,删除类似以下SQL语句。
SET @@GLOBAL.GTID_PURGED='d0502171-3e23-11e4-9d65-d89d672af420:1-373, d5deee4e-3e23-11e4-9d65-d89d672a9530:1-616234';
在Linux系统中,可以尝试使用类似以下命令删除。
awk '{ if (index($0,"GTID_PURGED")) { getline; while (length($0) > 0) { getline; } } else { print $0 } }' your.sql | grep -iv 'set @@' > your_revised.sql
适用于
云数据库RDS MySQL版
该文章对您有帮助吗?
- 本页导读 (1)
- 问题描述
- 问题原因
- 解决方案
- 适用于