0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[RDS] mysql でmysqldumpのimportが失敗する・・

Posted at

データベースを mysql8.0 にしているときに、mysqldump したファイルをmysqlコマンドで別スキーマにインポートすると、以下の様なエラーが出る。

ERROR 1227 (42000) at line 18: Access denied; you need (at least one of) the SUPER, SYSTEM_VARIABLES_ADMIN or SESSION_VARIABLES_ADMIN privilege(s) for this operation

解決策

RDSのパラメータグループの設定について gtid-mode を OFFにしました

image.png

解説など

ちなみに Line 18の記述はこんな感じ

SET @@SESSION.SQL_LOG_BIN= 0;

エラーメッセージの提案としてはユーザーに権限をあたえることとなっているけど、RDSのユーザーはSUPER権限は許容されていないです。
なので、ユーザーが許容されていないコマンドの原因となる設定を変更しました。これが、gtid-modeとなっています

よくみるとmysqldump作成時に以下の様なwarningが出ていた

Warning: A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions, even those that changed suppressed parts of the database. If you don't want to restore GTIDs, pass --set-gtid-purged=OFF. To make a complete dump, pass --all-databases --triggers --routines --events. 

DBのレプリケーションをする様な場合はgtid-modeを有効にする必要があるようなのですが、私の要件ではそれが必要無かったので、コピー元の設定を変更することで対応

gtid-modeの話としてはこのあたりが参考記事:https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/mysql-replication-gtid.html

一連の操作でやりたかったことは本番データベースの内容でステージング環境を構築することだったのですけど、本番データベースの設定を変えられない場合は、mysqldumpで出力される内容を変更することで対応できるようです

参考:https://docs.microsoft.com/ja-jp/azure/mysql/howto-troubleshoot-common-errors

RROR 1227 (42000) at line 18 (エラー 1227 (42000)、行 18): Access denied; you need (at least one of) the SUPER privilege(s) for this operation. (アクセスが拒否されました。この操作には、(少なくとも 1 つの) SUPER 権限が必要です。)
GTID が有効にされている MySQL サーバーからターゲット Azure Database for MySQL サーバーにダンプ ファイルをインポートしようとすると、上記のエラーが発生することがあります。 Mysqldump では、GTID が使用されているサーバーからのダンプ ファイルに SET @@SESSION.sql_log_bin=0 ステートメントが追加されます。これによって、ダンプ ファイルがリロードされている間のバイナリ ログが無効になります。

解決方法: インポート中のこのエラーを解決するには、万全を期すために、mysqldump ファイルにある以下の行を削除するかコメント アウトしてから、再度インポートを実行してください。

SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN; SET @@SESSION.SQL_LOG_BIN= 0; SET @@GLOBAL.GTID_PURGED=''; SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?