mysqldump を使用してデータを Amazon Relational Database Service (Amazon RDS) for MySQL インスタンスにインポートしようとすると、以下のようなエラーが発生します。

Error: 1227 SQLSTATE: 42000 (ER_SPECIFIC_ACCESS_DENIED_ERROR)
Access denied; you need (at least one of) the %s privilege(s) for this operation

このエラーは、ターゲットデータベースのバイナリログが有効になっていて、mysqldump ファイルにオブジェクト (トリガー、ビュー、関数、またはイベント) が含まれる場合に発生します。

"NO SQL"、"READS SQL DATA"、または "DETERMINISTIC" キーワードが含まれない create ステートメントがあると、MySQL はそれらのオブジェクトを作成できず、インポートはエラー 1227 で失敗します。

エラー 1227 を解決するには、以下のいずれかの操作を行います。

log_bin_trust_function_creators のパラメータグループ値を 1 に変更する

この状態を緩和し、すべてのオブジェクトのインポートを許可するには、RDS カスタムパラメータグループの log_bin_trust_function_creators グローバルシステム変数を 1 に設定します。詳細については、「DB パラメータグループのパラメータの変更」を参照してください。注意: デフォルトのパラメータグループの値は変更できないため、DB パラメータグループを作成してからパラメータを変更する必要があります。

  1. Amazon RDS コンソールを開き、ナビゲーションペインから [パラメータグループ] を選択します。
  2. log_bin_trust_function_creators パラメータグループ、[パラメータグループ] アクション、[Edit (編集)] の順に選択します。
  3. 1 に変更します。
  4. [Save changes] を選択します。注意: エラーが発生しているターゲットインスタンスにこの同じパラメータグループがアタッチされていることを確認してください。

mysqldump で DEFINER を見つけ、存在しないユーザーをターゲットデータベースから削除する

エラー 1227 を解決するには、mysqldump で DEFINER を見つけ、存在しないユーザーを RDS ターゲットデータベースから削除します。この問題は、Amazon RDS for MySQL がターゲットデータベース内のデータベースユーザーの下にオブジェクトを作成しようとしたとき、そのデータベースユーザーがターゲットデータベースに存在しない場合に発生する可能性があります。一部の MySQL クライアントは、論理的バックアップを作成したが、デフォルトにより発生しない場合、definer を無視するオプションを提供します。DEFINER を見つけて削除するには、「mysqldump を使用して RDS MySQL インスタンスへデータをインポートしたとき、definer エラーが発生しました」を参照してください。

mysqldump の DEFINER の例については、以下を参照してください。

/*!50003 CREATE*/ /*!50017 DEFINER=`rdsadmin`@`localhost`*/ /*!50003 TRIGGER customer_update AFTER UPDATE ON `customer` FOR EACH ROW

次の部分を削除します。

/*!50017 DEFINER=`rdsadmin`@`localhost`*/

修正した mysqldump は次のようになります。

/*!50003 CREATE*/ /*!50017 DEFINER=`masteruser`@`%`*/ /*!50003 TRIGGER customer_update AFTER UPDATE ON `customer` FOR EACH ROW

このページは役に立ちましたか? はい | いいえ

AWS サポート ナレッジ センターに戻る

サポートが必要ですか? AWS サポートセンターをご覧ください。

公開日: 2016 年 06 月 27 日

更新日: 2018 年 09 月 18 日