2017-06-20 10 views
0

あるサーバから別のサーバにmysqldumpを復元しようとしています。私は、インポートを実行すると:ストアドファンクションなしのmysqldump

mysql -u user -p < file.sql 

を私はエラーを取得:

You do not have the SUPER privilege and binary logging is enabled

簡単にGoogleは、私が設定して、それを修正することができていることを示しています。

SET GLOBAL log_bin_trust_function_creators = 1; 

ただし、サーバー上で、私は私はroot権限を持っていません。MySqlアカウントには、この設定を行うのに十分な権限がありません。

私はマニュアルページを見ていた:https://dev.mysql.com/doc/refman/5.7/en/stored-programs-logging.html

このエラーがインポートされている保存された機能に関連している可能性があり、それがこのエラーの原因となるので、それらが有効になっていないようです。

私は、元のデータベース上でこれを実行しました:

mysql> SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA = 'mydatabase' AND ROUTINE_TYPE = 'PROCEDURE'; 
Empty set (0.00 sec) 

だから、このエラーが発生した理由を元のデータベースがありませんので、ストアドプロシージャを持っていないようですか?

私はシステムにroot権限を持っていないので、私はmysqldumpのやりかたを変えることでこの問題を解決できますか?

データベースのインポートを機能させるにはどうすればよいですか?

編集;

これはトリガーによって引き起こされる可能性がありますか?元のデータベースに

SHOW TRIGGERS; 

を、あなたがトリガやストアドルーチンを作成する前に

答えて

1

log_bin...オプションをtrueに設定する必要があり、その結果として、それは、トリガーを持っている:私は走りました。 root権限を持っていない場合は、データベース管理者に相談してそのオプションを設定する必要があります。

SUPER特権が必要なもう一つのものは、ストアドルーチン、トリガー、ビューに表示されるDEFINER節です。これらの句を削除するには、スキーマ定義を編集する必要があります。

これは非常に不便です。私はSUPER特権を持つことができないAmazon RDS上のデータベースを復元するためにこれを行う必要がありました。

  1. データがなくトリガーのないスキーマをダンプする必要がありました。
  2. ストアドルーチンとビューからDEFINER句を削除するスキーマダンプの出力をフィルタ処理します。
  3. スキーマを復元します。
  4. スキーマ定義のないデータをダンプします。
  5. データを復元します。
  6. トリガーをダンプします。
  7. DEFINER節を削除するためのトリガー・ダンプの出力をフィルタします。
  8. トリガーを復元します。
関連する問題