とてもエラー
とあるオンプレのサーバで 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 | $ cat ./dump.sql | grep "SQL SECURITY DEFINER" |
これは、ダンプしたオンプレサーバに存在するユーザ(今回は seeder
の部分)が移行先のRDSに存在しない事が原因であるため、エラーになるのが正しい動作です
MySQL :: MySQL 5.6 リファレンスマニュアル :: 20.6 ストアドプログラムおよびビューのアクセスコントロール
対処する
Productな環境ではこの対処でよいのか怪しいですが、今回はそうではなかったので DEFINER
句ごと消して対処します
1 | $ sed -i 's/DEFINER=[^*]*\*/\*/g' ./dump.sql |