我正在尝试将mysqldump从一台服务器恢复到另一台服务器。当我运行导入时:
mysql -u user -p < file.sql
我收到错误:
您没有SUPER权限并启用了二进制日志记录
快速谷歌显示我可以通过设置来修复它:
SET GLOBAL log_bin_trust_function_creators = 1;
但是,在我导入的服务器上,我没有root权限,而且我的MySql帐户没有足够的权限来进行此设置。
我查看了手册页:https://dev.mysql.com/doc/refman/5.7/en/stored-programs-logging.html
似乎此错误可能与正在导入的存储函数有关,但未启用它们会导致此错误。
我在原始数据库上运行了这个:
mysql> SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA = 'mydatabase' AND ROUTINE_TYPE = 'PROCEDURE';
Empty set (0.00 sec)
所以看起来原始数据库没有存储过程,为什么会出现这个错误?
我没有对我导入的系统拥有root权限,所以我可以通过改变mysqldump的方式解决这个问题吗?
如何让数据库导入工作?
编辑;
这可能是由触发器引起的吗?我跑了:
SHOW TRIGGERS;
在原始数据库上,它有触发器作为结果
答案 0 :(得分:1)
在创建触发器或存储例程之前,必须将log_bin...
选项设置为true。如果您没有root权限,则需要与数据库管理员联系以设置该选项。
需要SUPER权限的另一件事是出现在例程,触发器和视图中的DEFINER
子句。您需要编辑模式定义以删除这些子句。
这非常不方便。我必须这样做才能恢复Amazon RDS上的数据库,我无法获得SUPER权限。我不得不打破数据库恢复过程:
DEFINER
子句。DEFINER
子句。