web-dev-qa-db-ja.com

アクセスが拒否されました;この操作には(少なくとも1つ)SUPER特権が必要です

したがって、SQLファイルをrds(1G MEM、1 CPU)にインポートしようとします。 SQLファイルは1.4Gのようなものです

mysql -h xxxx.rds.amazonaws.com -u user -ppass --max-allowed-packet = 33554432 db <db.sql

それで立ち往生しました:

ERROR 1227 (42000) at line 374: Access denied; you need (at least one of) the SUPER privilege(s) for this operation

実際のSQLコンテンツは次のとおりです。

/*!50003 CREATE*/ /*!50017 DEFINER=`another_user`@`1.2.3.4`*/ /*!50003 TRIGGER `change_log_BINS` BEFORE INSERT ON `change_log` FOR EACH ROW
IF (NEW.created_at IS NULL OR NEW.created_at = '00-00-00 00:00:00' OR NEW.created_at = '') THEN
        SET NEW.created_at = NOW();
END IF */;;

another_userはrdsに存在しないので、私はそうします:

GRANT ALL PRIVILEGES ON db.* TO another_user@'localhost';

まだ運がありません。

47
kenpeter

DEFINER=..ステートメントをsqldumpファイルから削除するか、ユーザー値をCURRENT_USERに置き換えます。

RDSが提供するMySQLサーバーは、(私の経験では)DEFINER構文を別のユーザーに許可しません。

sedスクリプトを使用して、ファイルからそれらを削除できます。

sed 's/\sDEFINER=`[^`]*`@`[^`]*`//g' -i oldfile.sql
91
hjpotter92