今天再复制服务器上数据库的时候(使用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;
常见问题处理之ERROR 1227 数据导入报错
使用mysqldump将本地数据导出,导入rds MySQL时。导入过程中可能会遇到以下错误:
ERROR 1227 (42000) at line 18: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
1.问题原因:MySQL导入用户的权限问题。
处于安全考虑,rds MySQL的最高权限用户root是没有super权限的,当前自建用户也不能有super权限。但是用户执行导入的sql中,包含需要super权限的语句,所以会报错。
如果源库开启了GTID特性,使用mysqldump 导出数据时,没有添加选项--set-gtid-purged=OFF,导出的sql中就有存在以下需要super权限执行的语句:
SET @@SESSION.SQL_LOG_BIN= 0;
SET @@GLOBAL.GTID_PURGED=´18f9a804-343b-11e5-a21d-b083fed01601:1-2´;
2.解决办法
办法1:导出语句中添加选项--set-gtid-purged=OFF重新导出,再导入即可。
mysqldump -uroot -p -h192.168.0.50 -P8635 --databases test --set-gtid-purged=OFF --master-data=2--single-transaction --order-by-primary -r dump.sql
办法2:使用source方式导入,这种方式即使权限问题报错,剩余sql语句仍可继续执行,不影响最终数据。
mysql>source /tmp/dump.sql
注意:sql文件的路径和权限
mysql -hdb.com -P50003 -uroot -p'2sd7' open -e "source /root/open.sql"