久々にmysqldumpを使用した際の話
とある検証のために本番環境の最新のデータを検証環境のデータベースにいれる必要があり、久々にmysqldumpを実行。
まずはテーブル名を指定してdumpファイルを作成する。
mysqldump -uユーザー名 -pパスワード -hホスト スキーマ名 テーブル名 > /tmp/dump.sql
実行。
Access denied; you need (at least one of) the PROCESS privilege(s) for this operation
アクセス拒否、PROCESS権限が必要です。
以前なら問題なく実行できていたユーザーなのに、必要な権限が増えている?
ということで調べてみると、リリースノートのセキュリティ注釈に記載があり
https://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-31.htmlSecurity Notes Incompatible Change: Access to the INFORMATION_SCHEMA.FILES table now requires the PROCESS privilege. This change affects users of the mysqldump command, which accesses tablespace information in the FILES table, and thus now requires the PROCESS privilege as well. Users who do not need to dump tablespace information can work around this requirement by invoking mysqldump with the --no-tablespaces option. (Bug #30350829) The linked OpenSSL library for MySQL Server has been updated to version 1.1.1g. Issues fixed in the new OpenSSL version are described at https://www.openssl.org/news/cl111.txt and https://www.openssl.org/news/vulnerabilities.html. (Bug #31296697)
PROCESS権限が必要になっていました。
ユーザーに権原を付与する、または
--no-tablespaces
オプションをつけることで回避できるそうです。
今回はオプションで対応しました。
改めて実行。
mysqldump -uユーザー名 -pパスワード -hホスト --no-tablespaces スキーマ名 テーブル名 > /tmp/dump.sql
今度は問題なくダンプ終了
mysql -uユーザー名 -pパスワード -hホスト スキーマ名 < /tmp/dump.sql
ロードする。
Access denied; you need (at least one of) the SUPER privilege(s) for this operation
さらにアクセス拒否が表示される。SUPER権限が必要です?
これについては
SET @@GLOBAL.GTID_PURGED
が原因でした
https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_set-gtid-purgedThis option enables control over global transaction ID (GTID) information written to the dump file, by indicating whether to add a SET @@GLOBAL.gtid_purged statement to the output. This option may also cause a statement to be written to the output that disables binary logging while the dump file is being reloaded.
グローバルトランザクションIDについては変更したくないので、これもオプションで対応。
--set-gtid-purged=OFF
を追記して、再度ダンプし直します。
mysqldump -uユーザー名 -pパスワード -hホスト --no-tablespaces --set-gtid-purged=OFF スキーマ名 テーブル名 > /tmp/dump.sql
そしてロードする。
mysql -uユーザー名 -pパスワード -hホスト スキーマ名 < /tmp/dump.sql
問題なくできました。これで最新のデータで検証を行うことができそうです。