Amazon RDS MySQL数据库还原时 log_bin_trust_function_creators 错误解决办法

时间:2024-01-04 13:54:08

使用了Amazon AWS EC2免费云空间,数据库实例采用Amazon RDS。原来在Windows Server上有一个存在大量数据的MySQL数据库。现在需要在Amazon RDS上还原这个MySQL数据库,勾掉Views(因为它会要求SUPER权限,而Master User无此权限,毕竟是托管的RDS),只留下Tables,如下图(使用Navicat):

Amazon RDS MySQL数据库还原时 log_bin_trust_function_creators 错误解决办法

图1:勾掉Views,因为RDS上的Masteruser无Super权限,无法还原Views对象

但在还原时,仍然出现如下的错误信息:

You do not have the SUPER privilege and binary logging is enabled (you *might* want to to use the less safe log_bin_trust_function_creators variable)

经查询,是log_bin_trust_function_creators值为off导致,因为Table中有Trigger,如果不创建Trigger,不会出现这样的错误信息,但Trigger必须创建,在网络查询解决方案,是如下的办法:

使用设置命令:

set global log_bin_trust_function_creators=1; 

但由于没有Super权限而无法完成。

永久解决方案如下:

 linux系统, 在/etc/my.cnf 文件中,[mysqld]部分加上:
 windows系统,在my.ini文件中,[mysqld]部分加上:
log_bin_trust_function_creators=1

就可以还原上备份数据库表中的Trigger。

实际情况是,对于Amazon RDS,是傻瓜型的配置,不允许用户配置my.cnf(也根本找不到这个文件),所以,配置办法是对其中的Parameter进行配置,从而对MySQL实例进行操作。在Parameter Group中,添加一个(注:默认的Parameter Group是无法修改的),命名后进行修改,将log_bin_trust_function_creators值设置为1;

Amazon RDS对参数配置的方法有三种,具体可参考http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithParamGroups.html

控制台方式(AWS Management Console);

命令行方式(CLI);

API方式;

这里使用控制台方式解决:

1、在RDS控制台,右边导航栏有“Parameter Groups”链接,点击“Create DB Parameters Group”,创建“Parameters Group”

2、选择版本、名称和描述

3、创建好以后,即可对里面的参数进行编辑(强调:MySQL默认的Parameter Group是无法编辑参数),这里是将log_bin_trust_function_creators值由default改为1,保存退出;

4、新创建一个RDS实例,在“Configure Advanced Settings”中,Parameter Group选项的下拉列表中,选择刚刚创建并修改好的组,如下图:

Amazon RDS MySQL数据库还原时 log_bin_trust_function_creators 错误解决办法

图2:在新建的RDS Instance中,不使用默认的Parameter Group,而使用自己创建并编辑的组

4-1、或者,在已经创建的RDS实际中,选中一个实例,在界面顶部的“Instance Actions”下拉菜单中,点击“Modify”,对Parameter Group进行修改,如下图:

Amazon RDS MySQL数据库还原时 log_bin_trust_function_creators 错误解决办法

图3:对已经存在的Parameter Group进行修改(图片中未修改前的状态,为MySQL 5.6默认的Parameter Group)

5、坐等RDS实例创建完成(或修改完成)。

再进行数据库的Restore,包含Triggers的Table可以成功还原。

说明:对于Views,在Amazon RDS上由于没有SUPER权限无法自动还原。可以在Tables还原后,手工创建View并将源DB中的View定义复制过来。如果哪位网友有对Amazon RDS操作更好的办法,请回复说明。谢谢。