使用了Amazon AWS EC2免費雲空間,數據庫實例采用Amazon RDS。原來在Windows Server上有一個存在大量數據的MySQL數據庫。現在需要在Amazon RDS上還原這個MySQL數據庫,勾掉Views(因為它會要求SUPER權限,而Master User無此權限,畢竟是托管的RDS),只留下Tables,如下圖(使用Navicat):
圖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選項的下拉列表中,選擇剛剛創建並修改好的組,如下圖:
圖2:在新建的RDS Instance中,不使用默認的Parameter Group,而使用自己創建並編輯的組
4-1、或者,在已經創建的RDS實際中,選中一個實例,在界面頂部的“Instance Actions”下拉菜單中,點擊“Modify”,對Parameter Group進行修改,如下圖:
圖3:對已經存在的Parameter Group進行修改(圖片中未修改前的狀態,為MySQL 5.6默認的Parameter Group)
5、坐等RDS實例創建完成(或修改完成)。
再進行數據庫的Restore,包含Triggers的Table可以成功還原。
說明:對於Views,在Amazon RDS上由於沒有SUPER權限無法自動還原。可以在Tables還原后,手工創建View並將源DB中的View定義復制過來。如果哪位網友有對Amazon RDS操作更好的辦法,請回復說明。謝謝。