没有存储函数的mysqldump

时间:2017-06-20 00:46:12

标签: mysql sql

我正在尝试将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;

在原始数据库上,它有触发器作为结果

1 个答案:

答案 0 :(得分:1)

在创建触发器或存储例程之前,必须将log_bin...选项设置为true。如果您没有root权限,则需要与数据库管理员联系以设置该选项。

需要SUPER权限的另一件事是出现在例程,触发器和视图中的DEFINER子句。您需要编辑模式定义以删除这些子句。

这非常不方便。我必须这样做才能恢复Amazon RDS上的数据库,我无法获得SUPER权限。我不得不打破数据库恢复过程:

  1. 转储架构,没有数据,也没有触发器。
  2. 过滤架构转储的输出,以从存储的例程和视图中删除DEFINER子句。
  3. 恢复架构。
  4. 转储没有架构定义的数据。
  5. 恢复数据。
  6. 转储触发器。
  7. 过滤触发器转储的输出以删除DEFINER子句。
  8. 恢复触发器。