2017-06-20 69 views
0

我想從一臺服務器恢復一個mysqldump到另一臺服務器。當我運行導入:mysqldump沒有存儲功能

mysql -u user -p < file.sql 

我得到的錯誤:

You do not have the SUPER privilege and binary logging is enabled

快速谷歌證明了我可以通過設置修復:

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

log_bin...選項必須設置爲true,才能創建觸發器或存儲程序。如果您沒有root權限,則需要與數據庫管理員聯繫以設置該選項。

需要SUPER權限的另一件事是存儲在例程,觸發器和視圖中的DEFINER子句。您需要編輯您的模式定義以刪除這些子句。

這很不方便。我必須這樣做才能恢復Amazon RDS上的數據庫,我無法擁有SUPER權限。我不得不分解數據庫恢復過程:

  1. 轉儲架構沒有數據和沒有觸發器。
  2. 過濾模式轉儲的輸出以從存儲的例程和視圖中刪除DEFINER子句。
  3. 還原模式。
  4. 轉儲沒有模式定義的數據。
  5. 恢復數據。
  6. 轉儲觸發器。
  7. 篩選觸發器轉儲的輸出以刪除DEFINER子句。
  8. 恢復觸發器。