115

mysql データベースを Amazon EC2 から RDS にコピーしようとしています:

mysqldumpこれを使用して、ルートフォルダーにデータベースを正常に作成しました。

root@ip-xx-xx-xx-xx:~# mysqldump my_database -u my_username -p > my_database.sql

次に、この .sql ファイルを新しい RDS データベースに転送しようとしました。

root@ip-xx-xx-xx-xx:~# mysql my_database -u my_username -p -h  
my_new_database.xxxxxxxxx.us-east-1.rds.amazonaws.com < my_database.sql

残念ながら、次のエラー メッセージが表示されます。

You do not have the SUPER privilege and binary logging is enabled 
(you *might* want to use  the less safe log_bin_trust_function_creators variable)

いろいろ試しGRANT SUPER..てみましたが、それをしようとするとエラーが発生します。タイピングもうまくいきmysql > FLUSH privileges;ません。

私はmysqlの初心者なので、そのような簡単な質問で申し訳ありません. 考え?

4

8 に答える 8

166
  1. RDS Web コンソールを開きます。
  2. 「パラメータグループ」タブを開きます。
  3. 新しいパラメータ グループを作成します。ダイアログで、MySQL データベースのバージョンと互換性のある MySQL ファミリを選択し、名前を付けて確認します。作成したばかりのパラメーター グループを選択し、「パラメーターの編集」を発行します。
  4. パラメータ「log_bin_trust_function_creators」を探し、その値を「1」に設定します。
  5. 変更を保存します。
  6. 「インスタンス」タブを開きます。MySQL インスタンスを展開し、「変更」という名前の「インスタンス アクション」を発行します。
  7. 作成したばかりのパラメーター グループを選択し、[すぐに適用] を有効にします。
  8. 「続行」をクリックして、変更を確認します。
  9. 「変更」操作が完了するまで待ちます。
  10. 再び、「インスタンス」タブを開きます。MySQL インスタンスを展開し、[インスタンス アクション] タブを展開して、[再起動] を選択します。

EDIT 2020 年 12 月: log_bin_trust_function_creatorsの適用タイプ = 動的であるため、再起動は必要ありません。少なくとも、新しいパラメーター グループを作成するのではなく、RDS に既にアタッチされているパラメーター グループがあり、それを編集する場合には、これは当てはまります。パラメータの編集を保存するだけで、準備完了です。

于 2015-06-16T17:56:54.810 に答える
80

http://getasysadmin.com/2011/06/amazon-rds-super-privileges/に従って、エラーなしでダンプ ファイルをロードするには、 AWS コンソールlog_bin_trust_function_creatorsで1 に設定する必要があります。

これらのエラーを無視して残りのダンプ ファイルをロードする場合は、次の-fオプションを使用できます。

mysql -f my_database -u my_username -p -h  
my_new_database.xxxxxxxxx.us-east-1.rds.amazonaws.com < my_database.sql

-fエラーを報告しますが、ダンプ ファイルの残りの処理を続行します。

于 2012-07-22T20:02:18.377 に答える
33

ダンプ ファイル内のトリガーとストアド プロシージャの問題は、これらの定義に、ストアド プロシージャを作成する必要があるユーザー (DEFINER) が含まれていることです。ユーザーが RDS に存在しない可能性が高いため、エラーが発生します。ダンプ ファイルをロードできるようにするには、sed または Perl を使用して DEFINER を削除し、インポートを実行しているユーザーでストアド プロシージャ/トリガーを作成します。

perl -pe 's/\sDEFINER=`[^`]+`@`[^`]+`//' < mysqldump.sql > mysqldump.fixed.sql

これで、固定ダンプ ファイルをロードできるはずです。

mysql my_database -u my_username -p -h rds_host < mysqldump.fixed.sql

以前の回答で述べたように、DB パラメータを設定する必要があります。

log_bin_trust_function_creators = 1
于 2014-09-03T07:14:31.003 に答える
6

バイナリログがデフォルトで有効になっているため、AWS ドキュメントで定義されているように、トリガー、プロシージャ、および関数はデフォルトで無効になっています。基本的に無効にすると、データベースがより安全になりますが、ネットワークを介して適切に保護されていれば問題ありません。

次の手順に従うと、問題が解決され ます https://aws.amazon.com/premiumsupport/knowledge-center/rds-mysql-functions/

また、プロシージャを作成するときに定義者を使用しないでください。簡単な sed コマンドで削除できます。

于 2016-11-15T05:50:24.240 に答える
1

arun-r answer を使用した後、問題が解決しない場合は、ダンプ ファイルを変更する必要があります。簡単です。

ダンプ ファイルには、次のような行があります。

DELIMITER ;;
CREATE DEFINER=`username_from_dumped_database`@`host_from_dumped_database` PROCEDURE `procedure_or_function_name`()
BEGIN

置き換える必要があります:

  • username_from_dumped_databaserds データベースのユーザー名で。
  • host_from_dumped_databse%

理由はわかりませんが、このトリックはうまくいきました。これには、単純なテキスト エディタで十分です。

于 2019-08-04T14:06:55.110 に答える
0

@arun-r の回答を完了するには、新しいパラメーター グループを作成するときに再起動が必要です。

ここに画像の説明を入力

于 2020-12-29T12:22:39.713 に答える