今天再復制服務器上數據庫的時候(使用Mysql Workbench )提示1227錯誤,
數據庫版本5.7.18,復制到的數據庫也是5.7.18。
總結一下網上的幾種方法:
方法一:
最直觀的翻譯是說權限的問題,一般是mysql的用戶創建后沒給權限,
select * from mysql.user where user='root'
查看權限后發現super_priv是為N,修改后導入還是無效;
方法二:
很多人是因為跨版本導入出現1227,然后說刪除
SET @@SESSION.SQL_LOG_BIN= 0;
就能實現,我這邊試了也不行;
最后是我的解決方法:
網上的方法我都試過還是導入不進去,
然后把提示中錯誤的地方都刪掉,最后導入成功了- -,
其實和方法二很像,刪除紅框的內容,黃框是添加的內容(把SET相關的都刪了,就能導入成功了):
刪除的前面2處地方是在sql的最開始,
SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN; SET @@SESSION.SQL_LOG_BIN= 0;
SET @@GLOBAL.GTID_PURGED='55a52aed-75e6-11e8-971f-246e96771c90:785864-787738, 569cf9ca-b336-11e8-be4e-501d93ecc0b8:1-10040';
最后一次在sql的尾部。
SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;
常見問題處理之ERROR 1227 數據導入報錯
使用mysqldump將本地數據導出,導入rds MySQL時。導入過程中可能會遇到以下錯誤:
ERROR 1227 (42000) at line 18: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
1.問題原因:MySQL導入用戶的權限問題。
處於安全考慮,rds MySQL的最高權限用戶root是沒有super權限的,當前自建用戶也不能有super權限。但是用戶執行導入的sql中,包含需要super權限的語句,所以會報錯。
如果源庫開啟了GTID特性,使用mysqldump 導出數據時,沒有添加選項--set-gtid-purged=OFF,導出的sql中就有存在以下需要super權限執行的語句:
SET @@SESSION.SQL_LOG_BIN= 0;
SET @@GLOBAL.GTID_PURGED=´18f9a804-343b-11e5-a21d-b083fed01601:1-2´;
2.解決辦法
辦法1:導出語句中添加選項--set-gtid-purged=OFF重新導出,再導入即可。
mysqldump -uroot -p -h192.168.0.50 -P8635 --databases test --set-gtid-purged=OFF --master-data=2--single-transaction --order-by-primary -r dump.sql
辦法2:使用source方式導入,這種方式即使權限問題報錯,剩余sql語句仍可繼續執行,不影響最終數據。
mysql>source /tmp/dump.sql
注意:sql文件的路徑和權限
mysql -hdb.com -P50003 -uroot -p'2sd7' open -e "source /root/open.sql"