
GCPストレージ内のSQLファイルからMySQLデータベースを復元しようとしました。手順としては、データベースのバックアップファイルをGCPストレージにアップロードし、このSQLファイルをGCP MySQLインスタンス内の指定されたデータベースにインポートしましたが、しばらく時間がかかり、例外が発生しました。
Import error: exit status 1 ERROR 1227 (42000) at line 10871: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
その後、ルートまたは他のユーザーにスーパー権限を付与しようとしましたが、とにかく機能しませんでした。スーパー権限を付与することはできませんでした。この問題を解決する方法がわかりません。助けていただければ幸いです。
更新(2020年1月17日):解決した問題
例外が発生した行を見つけようとしました
$ sed -n -e 10870p -e 10871p -e 10872p -e 10873p example.sql
そして私は見つけた
/*!50013 DEFINER= root
@ localhost
SQL セキュリティ DEFINER */
次に、このコマンドを使用して問題のあるステートメントを削除しました
cat example.sql | sed -e 's/DEFINER= root
@ localhost
//g' > example-CLEANED.sql
そしてそれは完了した
答え1
には権限CURRENT_USER
が必要ですSUPER
が、現在の にはDEFINER
権限がありません。 で再度ダンプしますmysqldump --skip-definer
(これが最も手間のかからない方法です)。これが選択肢にない場合は、ダンプを編集して を削除するかDEFINER
、その出現箇所すべてを に置き換えますCURRENT_USER
。SET
ダンプ内の特定のステートメントも、最終的に問題の原因となる可能性があります。