MySQL / Amazon RDSエラー:「SUPER権限がありません...」


97

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の初心者なので、こんな簡単な質問をしてすみません。考え?


9
GRANT SUPERRDSではできません。RDSには、SUPER特権を取得する方法はありません。
ceejayoz 2012

ダンプの作成と復元に同じMySQLユーザー名を使用します(ダンプの接続とDEFINERキーワードの場合)。log_bin_trust_function_creatorsを変更することは、望ましい解決策ではありません。最悪の場合、この場合は-fパラメータを使用します
ad4s

私の場合、私のsqlファイルにはCREATE FUNCTION特権ユーザーを必要とするステートメントがあります。これを参照してください
会計士م

回答:


63

http://getasysadmin.com/2011/06/amazon-rds-super-privileges/ごとにlog_bin_trust_function_creatorsAWSコンソールで 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エラーを報告しますが、ダンプ・ファイルの残りの処理を続行します。


こんにちは@Ross、ありがとうございます。残念ながら、使用-fしても効果がありませんでした。同じエラーが発生しました。あなたのリンクを使用して、RDS Cliツールの構文に問題があります。私は次のエラーを取得する権限を変更するために行くとき、意味:rds-modify-db-parameter-group: Malformed input-Unrecognized option: -–parameters=name=log_bin_trust_function_creators, Usage: rds-modify-db-parameter-group DBParameterGroupName --parameters "name=value, value=value, method=value" [ --parameters "name=value, value=value, method=value" ...] [General Options]
ティム・ピーターソン

上記のエラーが表示されるコマンドは次のとおりです。./rds-modify-db-parameter-group mygroup -–parameters "name=log_bin_trust_function_creators, value=on, method=immediate" –I="accesskeyxxxxxx" –S="secretkeyxxxxxxxx"引用符または2ダッシュの問題である必要があることはわかっていますが、これまでのところ、これらの種類の変更はどれも機能していません。
ティムピーターソン

4
この-fオプションでは、エラーが解消されるのではなく、ファイル内の問題のないSQLステートメントが処理されるだけです。私が読んだことから、RDSはダンプファイル内のストアドプロシージャを窒息させています。店舗の手続きなしでダンプファイルを作成してみて、そのロードOKかどうかを確認:mysqldump --routines=0 --triggers=0 --events=0 my_database -u my_username -p
ロス・スミスII

2
-@ Ross、動作しました。私のデータベースは存在します。これはうんざりする問題です。AWSはそれについて何かすべきだと感じています。
ティムピーターソン

少なくとも私は-fオプションですべてのデータをロードできます。第二段階は、別途など、ルーチン/ stred PROCのみをダンプするかもしれない
Kaymaz

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

>ポイント9の機能...インスタンスを調整して、以前に定義したパラメーターグループを使用します。詳細については、Daniel Ferbersによるこのオリジナルのブログ投稿を参照してください。techtavern.wordpress.com/ 2013/06/17
AndrewL

これによりRDS Mysqlレプリケーションが停止しますか?
Ramratan Gupta

こんにちは@ arun-r、私はあなたの説明した手順を実行しますが、パラメータ 'log_bin_trust_function_creators'は利用できない場合があります。最新のAWS RDSで何かが変更されたと思います。どうすれば今これを行うことができますか?おかげで
Pawan開発者

@RamratanGupta止まらない
-r

1
@ arun-rご回答ありがとうございます。私は私の問題を解決しました。実際、リストにlog_bin_trust_function_creatorsが見つかりました。しかし、私の問題はAWSサポートに連絡することで解決します
Pawan Developers

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

1
定義者のクリーンアップは、sedでも実行できます。sed -i 's / DEFINER = OldDefiner@ localhost/ DEFINER = NewDefiner@ localhost/ g' ./TargetSqlFile.sql
Siliconrockstar

14

私の場合、ダンプファイルにはSUPER権限を必要とする2つのコマンドしかありませんでした。

  • SET @@GLOBAL.gtid_purged
  • SET @@SESSION.SQL_LOG_BIN

mysqldumpドキュメントによると、これらをで無効にできます--set-gtid-purged=OFF

次に、man mysqldumpを確認します。

ダンプされたサーバーからのデータの一部のみを使用して新しいレプリケーションスレーブをデプロイする場合は、ONを使用します。トポロジ内でテーブルをコピーしてテーブルを修復する場合は、OFFを使用します。切り離されているレプリケーショントポロジ間でテーブルをコピーすることが意図されており、そのまま維持される場合は、OFFを使用します。

その--set-gtid-purged=OFFため、mysqldumpコマンドに追加することにし、結果のダンプファイルを正常にインポートできました。


1
ええ、これでした。私のダンプファイルは比較的小さかったので、これらの2つのコマンドをすべて削除しました。
Zolbayar

6

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

次の手順に従ってください。問題が修正されます ますhttps://aws.amazon.com/premiumsupport/knowledge-center/rds-mysql-functions/

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



1

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

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

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

交換する必要があります:

  • username_from_dumped_database rdsデータベース上のユーザー名。
  • host_from_dumped_databse 沿って %

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.