とてもエラー

とあるオンプレのサーバで mysqldumpしたSQLファイルを、RDSにリストアしようとした時にエラーが出た

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

調べた

これは、ダンプしたSQLファイルに SECURITY DEFINERというのが含まれているかららしい。ファイルを見てみるとたしかに存在している

1
2
$ cat ./dump.sql | grep "SQL SECURITY DEFINER"
/*!50013 DEFINER=`seeder`@`%` SQL SECURITY DEFINER */

これは、ダンプしたオンプレサーバに存在するユーザ(今回は seederの部分)が移行先のRDSに存在しない事が原因であるため、エラーになるのが正しい動作です

MySQL :: MySQL 5.6 リファレンスマニュアル :: 20.6 ストアドプログラムおよびビューのアクセスコントロール

対処する

Productな環境ではこの対処でよいのか怪しいですが、今回はそうではなかったので DEFINER句ごと消して対処します

1
$ sed -i 's/DEFINER=[^*]*\*/\*/g' ./dump.sql