全部产品
云市场

RDS MySQL出现“OPERATION need to be executed set by ADMIN”报错

问题描述

  • 在创建存储过程、函数、触发器、事件、视图的时候出现如下错误。
  • 从本地数据库导出SQL,在RDS上应用该SQL的时候出现如下错误。
  • 从RDS MySQL 5.6实例下载逻辑备份,导入到RDS或本地数据库中,出现如下错误,错误代码为1227和1725。
[Err] 1227 - Access denied; you need (at least one of) the SUPER privilege(s) for this operation --常见于RDS MySQL 5.6 
ERROR 1725 (HY000) at line 1936: OPERATION need to be executed set by ADMIN --常见于RDS MySQL 5.5
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语句,而RDS MySQL不提供Super权限,因此需要删除这类语句。
  • 本地MySQL实例没有启用GTID。

解决方案

阿里云提醒您:

  • 如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。
  • 如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。
  • 如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。
  1. 删除DEFINER语句。
    1. 检查SQL文件,删除类似以下SQL语句。
      DEFINER=`root`@`%`
    2. 在Linux系统中,可以尝试使用以下命令删除。
      sed -ie 's/DEFINER[ ]*=[ ]*[^ ]*/ / ' your.sql
  2. 删除GTID_PURGED语句。
    说明:也可以导出的时候在mysqldump命令后添加参数“--set-gtid-purged=off“来取消输出GTID_PURGED子句。
    1. 检查SQL文件,删除类似以下SQL语句。
      SET @@GLOBAL.GTID_PURGED='d0502171-3e23-11e4-9d65-d89d672af420:1-373, d5deee4e-3e23-11e4-9d65-d89d672a9530:1-616234';
    2. 在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版

发布块:仅发布到中文站

如果您的问题仍未解决,您可以在阿里云社区免费咨询,或提交工单联系阿里云技术支持。