問題描述
在創建存儲過程、函數、觸發器、事件、視圖的時候出現如下錯誤。
從本地數據庫導出SQL,在RDS上應用該SQL的時候出現如下錯誤。
從RDS MySQL 5.6實例下載邏輯備份,導入到RDS或本地數據庫中,出現如下錯誤,錯誤代碼為1227和1725。
執行MySQL語句修改參數時,出現如下錯誤。
[Err] 1227 - Access denied; you need (at least one of) the SUPER privilege(s) for this operation --常見于RDS MySQL 5.6
ERROR 1725 (HY000) at line 1936: OPERATION need to be executed set by ADMIN --常見于RDS MySQL 5.5
ERROR 1227 (42000) at line 2984: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
問題原因
數據導入RDS MySQL實例時,SQL語句中含有需要Super權限的用戶才可以執行的SQL語句,而RDS MySQL不提供Super權限,因此需要刪除這類語句。
本地MySQL實例沒有啟用GTID。
因數據庫賬號權限不足,無法通過執行MySQL語句修改部分參數(例如SET GLOBAL event_scheduler = 1)。
解決方案
刪除DEFINER語句。
檢查SQL文件,刪除類似以下SQL語句。
DEFINER=`root`@`%`
在Linux系統中,可以嘗試使用以下命令刪除。
sed -ie 's/DEFINER[ ]*=[ ]*[^ ]*/ / ' your.sql
刪除GTID_PURGED語句。
說明也可以導出的時候在mysqldump命令后添加參數“--set-gtid-purged=off“來取消輸出GTID_PURGED子句。
檢查SQL文件,刪除類似以下SQL語句。
SET @@GLOBAL.GTID_PURGED='d0502171-3e23-11e4-9d65-d89d672af420:1-373, d5deee4e-3e23-11e4-9d65-d89d672a9530:1-616234';
在Linux系統中,可以嘗試使用類似以下命令刪除。
awk '{ if (index($0,"GTID_PURGED")) { getline; while (length($0) > 0) { getline; } } else { print $0 } }' your.sql | grep -iv 'set @@' > your_revised.sql
請檢查您的權限后更換賬號,或對賬號賦權后重新執行。如果您本人無權限操作賬號,請聯系您的管理員。
適用于
云數據庫RDS MySQL版
常見問題
Q:高權限賬號在新建表時,報錯“Access denied for user 'XXX'@'%' to database '__recycle_bin__'”該如何解決?
A:MySQL不推薦或不允許在系統數據庫中建立自定義表,建議切換至自定義庫或新建自定義庫后,再執行建表語句。
文檔內容是否對您有幫助?