RDS导入数据报错[Err] 1227 - Access denied; you need。。。SUPER

华为云 RDS导入数据报错[Err] 1227 - Access denied; you need (at least one of) the SUPER privilege(s) for this operation


解决:

华为云的RDS的root用户默认不提供super权限,可以参考: https://support.huaweicloud.com/rds_faq/rds_faq_0075.html

这个问题可通过以下2个途径解决:
     1、修改从Navicat导出来的sql文件,去掉“DEFINER=`root`@`xxx`”
     2、使用mysqldump导出导入数据,可以参考:

https://support.huaweicloud.com/usermanual-rds/rds_migration_mysql.html

mysqldump --databases lhrdb --single-transaction --order-by-primary --hex-blob --no-data --routines --events --set-gtid-purged=OFF -u root -plhr@zr123 -h 121.36.12.84 -P 3306 |sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' -e 's/DEFINER[ ]*=.*FUNCTION/FUNCTION/' -e 's/DEFINER[ ]*=.*PROCEDURE/PROCEDURE/' -e 's/DEFINER[ ]*=.*TRIGGER/TRIGGER/' -e 's/DEFINER[ ]*=.*EVENT/EVENT/' -e 's/DEFINER[ ]*=.*SQL SECURITY DEFINER/SQL SECURITY DEFINER/' > d:\C.sql
--- MySQL替换掉“DEFINER=`root`@`xxx`”,避免RDS中错误:[Err] 1227 - Access denied; you need (at least one of) the SUPER privilege(s) for this operation
mysqldump --databases lhrdb --single-transaction --order-by-primary --hex-blob --no-data --routines --events --set-gtid-purged=OFF -u root -plhr@zr123 -h 121.36.12.84 -P 3306 |sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' -e 's/DEFINER[ ]*=.*FUNCTION/FUNCTION/' -e 's/DEFINER[ ]*=.*PROCEDURE/PROCEDURE/' -e 's/DEFINER[ ]*=.*TRIGGER/TRIGGER/' -e 's/DEFINER[ ]*=.*EVENT/EVENT/' -e 's/DEFINER[ ]*=.*SQL SECURITY DEFINER/SQL SECURITY DEFINER/' > d:\C.sql
cat C:\Users\chinasoft_lhrxxt\Desktop\a.sql  |sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' -e 's/DEFINER[ ]*=.*FUNCTION/FUNCTION/' -e 's/DEFINER[ ]*=.*PROCEDURE/PROCEDURE/' -e 's/DEFINER[ ]*=.*TRIGGER/TRIGGER/' -e 's/DEFINER[ ]*=.*EVENT/EVENT/' -e 's/DEFINER[ ]*=.*SQL SECURITY DEFINER/SQL SECURITY DEFINER/' > d:\b.sql
cat a.sql  |sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' -e 's/DEFINER[ ]*=.*FUNCTION/FUNCTION/' -e 's/DEFINER[ ]*=.*PROCEDURE/PROCEDURE/' -e 's/DEFINER[ ]*=.*TRIGGER/TRIGGER/' -e 's/DEFINER[ ]*=.*EVENT/EVENT/' -e 's/DEFINER[ ]*=.*SQL SECURITY DEFINER/SQL SECURITY DEFINER/' > b.sql



root帐号为什么没有super权限

https://support.huaweicloud.com/rds_faq/rds_faq_0075.html

大部分的关系型数据库云服务平台,都未给root帐号提供super权限。因为一旦用户拥有了super权限,就可以执行很多管理性的命令,比如reset master,set global…,kill,reset slave等,这很有可能导致主备关系异常而出现故障。这一点是云服务平台和本地搭建MySQL比较大的区别,RDS提供服务化能力,那就需要保证实例的稳定正常运行。

对于客户要求super权限的场景,RDS可以提供服务化能力,也可以通过其他手段绕过super权限的限制。

举例如下:

  1. 举例1:有些用户喜欢登录数据库执行如下命令来修改参数,这在RDS是被禁止的,您只能通过RDS界面中的参数修改功能来实现。

    set global 参数名= 参数值;

    如果您的脚本中包含 set global命令导致super缺失,请删除 set global命令,通过console的参数修改。

  2. 举例2:有些用户执行如下命令报错,这也是因为没有super权限导致的,只需要去除 define='root’关键字即可。

    create definer='root'@'%’ trigger(procedure)…

    如果您缺失super权限,可以使用mysqldump导入数据,请参考 使用mysqldump迁移MySQL数据导入和导出数据。

  3. 举例3:如果您在创建PostgreSQL插件时缺少super权限,请参考 管理插件进行创建扩展。


使用mysqldump迁移MySQL数据

https://support.huaweicloud.com/usermanual-rds/rds_migration_mysql.html

迁移准备

华为云关系型数据库服务支持开启公网访问功能,通过弹性公网IP进行访问。您也可通过弹性云服务器的内网访问华为云关系型数据库。

  1. 准备弹性云服务器或可通过公网访问华为云关系型数据库。
    • 通过弹性云服务器连接华为云关系型数据库实例,需要创建一台弹性云服务器。

      创建并连接弹性云服务器,请参见 如何创建和连接ECS

    • 通过公网地址连接华为云关系型数据库实例,需具备以下条件。
      1. 先对华为云关系型数据库实例绑定公网地址,如何绑定公网地址,请参见 绑定弹性公网IP
      2. 保证本地设备可以访问华为云关系型数据库实例绑定的公网地址。
  2. 在准备的弹性云服务器或可访问华为云关系型数据库的设备上,安装MySQL客户端。

    请参见 如何安装MySQL客户端

    说明: 

    该弹性云服务器或可访问华为云关系型数据库的设备需要安装和RDS MySQL数据库服务端相同版本的数据库客户端,MySQL数据库或客户端会自带mysqldump和mysql工具。

导出数据

要将源数据库迁移到华为云关系型数据库,需要先对其进行导出。

须知:
  • 相应导出工具需要与数据库引擎版本匹配。
  • 数据库迁移为离线迁移,您需要停止使用源数据库的应用程序。
  1. 登录已准备的弹性云服务器,或可访问华为云关系型数据库的设备。
  2. 使用mysqldump将元数据导出至SQL文件。

    须知:

    MySQL数据库是华为云关系型数据库服务管理所必须的数据库,导出元数据时,禁止指定 --all-database参数,否则会造成数据库故障。

    mysqldump  --databases < DB_NAME--single-transaction --order-by-primary --hex-blob --no-data --routines --events --set-gtid-purged=OFF -u < DB_USER-p -h < DB_ADDRESS-P < DB_PORT|sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' -e 's/DEFINER[ ]*=.*FUNCTION/FUNCTION/' -e 's/DEFINER[ ]*=.*PROCEDURE/PROCEDURE/' -e 's/DEFINER[ ]*=.*TRIGGER/TRIGGER/' -e 's/DEFINER[ ]*=.*EVENT/EVENT/' > 

    • DB_NAME为要迁移的数据库名称。
    • DB_USER为数据库用户。
    • DB_ADDRESS为数据库地址。
    • DB_PORT为数据库端口。
    • BACKUP_FILE为导出生成的文件名称

    根据命令提示输入数据库密码。

    示例如下:

    mysqldump --databases rdsdb --single-transaction --order-by-primary --hex-blob --no-data --routines --events --set-gtid-purged=OFF -u root -p -h 192.168.151.18 -P 3306 |sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' -e 's/DEFINER[ ]*=.*FUNCTION/FUNCTION/' -e 's/DEFINER[ ]*=.*PROCEDURE/PROCEDURE/' -e 's/DEFINER[ ]*=.*TRIGGER/TRIGGER/' -e 's/DEFINER[ ]*=.*EVENT/EVENT/' > dump-defs.sql

    Enter password:

    说明: 

    若使用的mysqldump低于5.6版本,需要去掉“--set-gtid-purged=OFF”。

    命令执行完会生成“dump-defs.sql”文件,如下:

    [rds@localhost ~]$ ll dump-defs.sql
    -rw-r-----. 1 rds rds 2714 Sep 21 08:23 dump-defs.sql

  3. 使用mysqldump将数据导出至SQL文件。

    须知:

    MySQL数据库是华为云关系型数据库服务管理所必须的数据库,导出元数据时,禁止指定 --all-database参数,否则会造成数据库故障。

    mysqldump --databases < DB_NAME--single-transaction --hex-blob --set-gtid-purged=OFF --no-create-info --skip-triggers  -u< DB_USER-p  -h < DB_ADDRESS-P < DB_PORT-r < BACKUP_FILE>

    以上命令的参数说明如 2所示。

    根据命令提示输入数据库密码。

    示例如下:

    mysqldump --databases rdsdb --single-transaction --hex-blob --set-gtid-purged=OFF --no-create-info --skip-triggers -u root -p -h 192.168.151.18 -P  3306 -r dump-data.sql

    说明: 

    若使用的mysqldump低于5.6版本,需要去掉“--set-gtid-purged=OFF”。

    命令执行完会生成“dump-data.sql”文件,如下:

    [rds@localhost ~]$ ll dump-data.sql
    -rw-r-----. 1 rds rds 2714 Sep 21 08:23 dump-data.sql

导入数据

通过弹性云服务器或可访问华为云关系型数据库的设备,用相应客户端连接华为云关系型数据库实例,将导出的SQL文件导入到华为云关系型数据库。

须知:

如果源数据库中包含触发器、存储过程、函数或事件调用,则需确保导入前设置目标数据库参数log_bin_trust_function_creators=ON。

  1. 导入元数据到华为云关系型数据库。

    先用mysql工具连接华为云关系型数据库实例,输入密码后,再执行导入命令。

    mysql -f -h    -P < DB_PORT-u root  -p <  /dump-defs.sql

    • RDS_ADDRESS为华为云关系型数据库实例的IP地址。
    • DB_PORT为当前数据库实例的端口。
    • BACKUP_DIR为“dump-defs.sql”所在目录。

    示例如下:

    # mysql -f -h 172.16.66.198 -P 3306 -u root -p < dump-defs.sql

    Enter password:

  2. 导入数据到华为云关系型数据库。

    mysql -f -h    -P < DB_PORT-u root  -p  /dump-data.sql

    • RDS_ADDRESS为华为云关系型数据库实例的IP地址。
    • DB_PORT为当前数据库实例的端口。
    • BACKUP_DIR为“dump-data.sql”所在目录。

    示例如下:

    # mysql -f -h 172.16.66.198 -P 3306 -u root -p < dump-data.sql

    Enter password:

  3. 查看迁移结果。

    mysql> show databases;

    示例中,名为my_db的数据库已经被导入了:

    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | my_db              |
    | mysql              |
    | performance_schema |
    +--------------------+
    4 rows in set (0.00 sec)


使用Mysql Workbench 导入数据库提示 ERROR 1227 (42000) at line 18: Access denied; you need (at least one of) the SUPER privilege(s) for

今天再复制服务器上数据库的时候(使用Mysql Workbench )提示1227错误,

数据库版本5.7.18,复制到的数据库也是5.7.18。

总结一下网上的几种方法:

方法一:

最直观的翻译是说权限的问题,一般是mysql的用户创建后没给权限,

select * from mysql.user where user='root'

查看权限后发现super_priv是为N,修改后导入还是无效;

方法二:

很多人是因为跨版本导入出现1227,然后说删除

SET @@SESSION.SQL_LOG_BIN= 0;

就能实现,我这边试了也不行;

最后是我的解决方法:

网上的方法我都试过还是导入不进去,

然后把提示中错误的地方都删掉,最后导入成功了- -,

其实和方法二很像,删除 红框的内容, 黄框是添加的内容( 把SET相关的都删了,就能导入成功了):

删除的前面2处地方是在sql的最开始,

SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN;
SET @@SESSION.SQL_LOG_BIN= 0;
SET @@GLOBAL.GTID_PURGED='55a52aed-75e6-11e8-971f-246e96771c90:785864-787738,
569cf9ca-b336-11e8-be4e-501d93ecc0b8:1-10040';

最后一次在sql的尾部。

SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;

 





About Me

........................................................................................................................

● 本文作者:小麦苗,部分内容整理自网络,若有侵权请联系小麦苗删除

● 本文在itpub、博客园、CSDN和个人微 信公众号( DB宝)上有同步更新

● 本文itpub地址: http://blog.itpub.net/26736162

● 本文博客园地址: http://www.cnblogs.com/lhrbest

● 本文CSDN地址: https://blog.csdn.net/lihuarongaini

● 本文pdf版、个人简介及小麦苗云盘地址: http://blog.itpub.net/26736162/viewspace-1624453/

● 数据库笔试面试题库及解答: http://blog.itpub.net/26736162/viewspace-2134706/

● DBA宝典今日头条号地址: http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826

........................................................................................................................

● QQ群号: 230161599 、618766405

● 微 信群:可加我微 信,我拉大家进群,非诚勿扰

● 联系我请加QQ好友 646634621 ,注明添加缘由

● 于 2020-04-01 06:00 ~ 2020-04-30 24:00 在西安完成

● 最新修改时间:2020-04-01 06:00 ~ 2020-04-30 24:00

● 文章内容来源于小麦苗的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

........................................................................................................................

小麦苗的微店https://weidian.com/s/793741433?wfr=c&ifr=shopdetail

小麦苗出版的数据库类丛书http://blog.itpub.net/26736162/viewspace-2142121/

小麦苗OCP、OCM、高可用网络班http://blog.itpub.net/26736162/viewspace-2148098/

小麦苗腾讯课堂主页https://lhr.ke.qq.com/

........................................................................................................................

使用 微 信客户端扫描下面的二维码来关注小麦苗的微 信公众号( DB宝)及QQ群(DBA宝典)、添加小麦苗微 信, 学习最实用的数据库技术。

........................................................................................................................

欢迎与我联系

 

 



请使用浏览器的分享功能分享到微信等