1. 程式人生 > >Amazon RDS MySQL資料庫還原時 log_bin_trust_function_creators 錯誤解決辦法

Amazon RDS MySQL資料庫還原時 log_bin_trust_function_creators 錯誤解決辦法

使用了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;

控制檯方式(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操作更好的辦法,請回復說明。謝謝。