RDSでmysqldumpで取得したファイルをインポートしようとしたら、以下のエラーが出ました。
その中には、トリガーも含まれていたので、以下のような記述もありました。
I got dump file by using mysqldump, and tried to import it into mysql on RDS.
But, this error occurred.
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `product_log` AFTER INSERT ON `product`
FOR EACH ROW
INSERT INTO ........
RDSではsuper権限は持てないので、以下を設定しましょう、というのは、公式ドキュメントにも載っているので、設定してみた。
In RDS, super privilege is unavailable. We need to change a parameter group.
ERROR 1419 (HY000) at line 3155: 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)
この状況を緩和するには、RDS カスタムパラメーターグループの log_bin_trust_function_creators システム変数に 1 を設定します。
To relax this condition, set the global log_bin_trust_function_creators system variables to 1 through the RDS custom parameter group.
しかし、状況は解決せず、筆者の環境では、それでも以下のエラーが出た。
But, the problem wasn't solved. the error below occurred in my case.
ERROR 1227 (42000) Access denied; you need (at least one of) the SUPER privilege(s) for this operation
トリガーなどの作成時にDEFINER属性が含まれていると、作成時にDEFINER属性で指定したユーザーを使おうとしてしまうので、上記のエラーが出てしまう。そのため、
If dumpfile includes DEFINER attribute, mysql tries to create trigger with the specified user in DEFINER attribute.
To solve this is that remove the DEFINER attribute.
DEFINER=`root`@`localhost`
この部分を削除してあげれば、問題なく作成することができます。
My problem was solved by removal of this attribute!