![](/img/trans.png)
[英]How do you remove/undo/delete a pending modification on Amazon Aurora RDS?
[英]MySQL/Amazon RDS error: "you do not have SUPER privileges..."
我正在嘗試將我的 mysql 數據庫從 Amazon EC2 復制到 RDS:
我使用這個成功地將我的數據庫的mysqldump
放到了我的根文件夾中:
root@ip-xx-xx-xx-xx:~# mysqldump my_database -u my_username -p > my_database.sql
然后我嘗試將 this.sql 文件傳輸到我的新 RDS 數據庫:
root@ip-xx-xx-xx-xx:~# mysql my_database -u my_username -p -h
my_new_database.xxxxxxxxx.us-east-1.rds.amazonaws.com < my_database.sql
不幸的是,我收到以下錯誤消息:
You do not have the SUPER privilege and binary logging is enabled
(you *might* want to use the less safe log_bin_trust_function_creators variable)
我嘗試以多種方式GRANT SUPER..
但是當我嘗試這樣做時我也遇到了錯誤。 輸入mysql > FLUSH privileges;
也不起作用。
我是 mysql 初學者,很抱歉回答這么簡單的問題。 想法?
log_bin_trust_function_creators
並將其值設置為1
。 不需要重啟,因為log_bin_trust_function_creators
有apply type = dynamic
。 如果你的 RDS 已經有一個附加的參數組並且你編輯它,而不是創建一個新的參數組,至少這是正確的。 只需保存參數編輯即可。
根據http://getasysadmin.com/2011/06/amazon-rds-super-privileges/ ,您需要在AWS 控制台中將log_bin_trust_function_creators
設置為 1,以無誤地加載轉儲文件。
如果你想忽略這些錯誤,並加載轉儲文件的其余部分,你可以使用-f
選項:
mysql -f my_database -u my_username -p -h
my_new_database.xxxxxxxxx.us-east-1.rds.amazonaws.com < my_database.sql
-f
將報告錯誤,但會繼續處理轉儲文件的剩余部分。
轉儲文件中觸發器和存儲過程的問題在於,這些定義包括應該由 DEFINER 創建存儲過程的用戶。 該用戶很可能不存在於 RDS 中,因此會引發錯誤。 為了能夠加載轉儲文件,您可以使用 sed 或 Perl 刪除 DEFINER,並與執行導入的用戶一起創建存儲過程/觸發器。
perl -pe 's/\sDEFINER=`[^`]+`@`[^`]+`//' < mysqldump.sql > mysqldump.fixed.sql
現在您應該能夠加載固定的轉儲文件
mysql my_database -u my_username -p -h rds_host < mysqldump.fixed.sql
如前面的回答所述,您應該設置數據庫參數:
log_bin_trust_function_creators = 1
對我來說,我的轉儲文件中只有 2 個命令需要 SUPER 權限:
SET @@GLOBAL.gtid_purged
SET @@SESSION.SQL_LOG_BIN
根據mysqldump 文檔,您可以使用--set-gtid-purged=OFF
禁用它們。
然后查看man mysqldump :
如果打算僅使用來自轉儲服務器的部分數據來部署新的復制從站,請使用 ON。 如果打算通過在拓撲中復制表來修復表,請使用 OFF。 如果打算在不相交的復制拓撲之間復制表,請使用 OFF,並將保持不相交。
所以我決定將--set-gtid-purged=OFF
添加到我的mysqldump
命令中,然后我就可以成功導入生成的轉儲文件。
正如 AWS 文檔中所定義的那樣,觸發器、過程和函數在默認情況下是禁用的,因為二進制日志記錄在默認情況下是啟用的。 禁用基本上可以使您的數據庫更安全,但是如果您通過網絡進行了適當的保護,那將無關緊要。
按照這些步驟操作,您的問題將得到解決https://aws.amazon.com/premiumsupport/knowledge-center/rds-mysql-functions/
此外,在創建過程時不應使用定義器。 一個簡單的 sed 命令就可以刪除它。
除了編輯
log_bin_trust_function_creators = 1
您需要從轉儲文件中刪除所有DEFINER ,請檢查以下鏈接以獲取可幫助清理 sql 轉儲文件的SED命令。
要完成 @arun-r 的回答,創建新參數組時需要重新啟動。
使用arun -r answer后,如果問題沒有解決則需要修改你的dump文件。 很簡單。
在轉儲文件中,您會找到類似以下的行:
DELIMITER ;;
CREATE DEFINER=`username_from_dumped_database`@`host_from_dumped_database` PROCEDURE `procedure_or_function_name`()
BEGIN
你必須更換:
username_from_dumped_database
通過您在 rds 數據庫上的用戶名。host_from_dumped_databse
按%
我不知道為什么,但這個技巧對我有用。 一個簡單的文本編輯器就足以做到這一點。
在AWS/RDS中設置參數的正確方法是創建參數組,就像此處提到的其他響應一樣。
對於這種特殊情況,在創建新參數組時,在參數部分將變量log_bin_trust_function_creators
設置為1 。
修改您的數據庫,然后 select 您的新參數組位於Additional configuration部分下的DB parameter group 。
盡管我啟用了Apply Immediately ,但它對我不起作用(MySQL v8)。 重啟后就成功了!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.