環境構築時にハマったお話
先日、AデータベースサーバからBデータベースサーバにデータをmysqldump→mysqlコマンドでエクスポート&リストアしました。
ところが
Aから取得した "aスキーマ" の一部のオブジェクトがBに正しくリストアされてないことがわかり、再度やりなおしてみることに。
再実行してみると・・・
もう一度エラーログを出力しつつ、同じように実行してみたところこんなエラーが。
ERROR 1227 (42000) at line 3018: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
rootでやったのに、SUPER privilege(s)がないとはこれ如何に?
原因はコレ
/*!50013 DEFINER=`aaa`@`%` SQL SECURITY DEFINER */
これがダンプファイル内で指定されているとそのユーザ(上記で言う"aaa@%”ユーザ)以外でのそのオブジェクトのリストアが失敗する。
解決方法は2つ
- 指定されたユーザでリストアする
- 対象行(/*!50013~が書かれた部分)を削ってから適当なユーザでリストアする
MySQL、躓きポイントがたくさんあって毎日学ぶわ。