mysqldumpでtablespacesのプロセス特権エラーの対処法

mysqldump-process-privilegeテクノロジー

MySQLアップデートした後、いつものようにデータベースのバックアップをしようとmysqldumpコマンドを実行したら、以下のようなエラーが表示されました。

mysqldump: Error: ‘Access denied; you need (at least one of) the PROCESS privilege(s) for this operation’ when trying to dump tablespaces

どうやら、mysqldumptablespaces?をダンプする際には、プロセス特権PROCESS privilege(s))が必要らしいです。。
今回はこのエラーの原因と対処法をご紹介します!

mysqldumpの使い方や最適なオプションについてはこちらから!

プロセス特権エラーの原因

それでは、原因を特定するために、冷静になって今一度エラーの内容を確認してみましょう!

mysqldump: Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces

英語わかんないw
いつものごとく、Google翻訳に頼ります!

mysqldump:エラー:'アクセスが拒否されました;表領域をダンプしようとするときは、この操作にPROCESS特権(少なくとも1つ)が必要です。

ふむふむ。tablespacesはどこかの表領域のことで、それをダンプしようとするとPROCESS特権がなくてエラーになるらしい。。

管理者
管理者

バックアップファイルは出力されたみたいだけど…どうして?
MySQLをアップデートする前は表示されてなかったのに…。

これだけだと、なぜ突然エラーになったか分からないので、MySQLバージョンを確認して公式サイトのリリースノートをみてみましょう。

MySQL公式のリリースノートを確認

ありました!
MySQL 5.7.31で以下のような記述を発見しました。
2020年7月の情報か…MySQLバージョンかなり古かったんだな…。

Security 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)

引用:MySQL :: MySQL 5.7 Release Notes :: Changes in MySQL 5.7.31 (2020-07-13, General Availability)

はい!こちらもテクノロジーの恩恵を受けて、すぐさま翻訳しちゃいます!

セキュリティ上の注意
互換性のない変更:INFORMATION_SCHEMA.FILESテーブルへのアクセスには、PROCESS特権が必要になりました。

この変更は、FILES表の表領域情報にアクセスするmysqldumpコマンドのユーザーに影響を与えるため、PROCESS特権も必要になります。表領域情報をダンプする必要がないユーザーは、-no-tablespacesオプションを指定してmysqldumpを呼び出すことにより、この要件を回避できます。 (バグ#30350829)

引用:MySQL :: MySQL 5.7 Release Notes :: Changes in MySQL 5.7.31 (2020-07-13, General Availability)

何となく理解できましたね!
tablespcesとはINFORMATION_SCHEMA.FILESで、MySQL 5.7.31以降から、このテーブルにアクセスするためにPROCESS特権が必要になったそうな。。
ちなみに、原因と一緒に対処法も書いてありましたね!

2つの対処法

ここまで読んだら察しはついたと思いますが、対処法は以下の2つ
公式サイトに記載があると通り、mysqldumpコマンドに[–no-tablespaces]オプションを付けるか、mysqldumpを実行するユーザーにプロセス特権がないのなら、権限を与えるの2択になります。

  1. –no-tablespacesオプションを付ける
  2. ユーザーに権限を与える

–no-tablespacesオプションを追加する

この対処法は、ただmysqldumpに[–no-tablespaces]オプションを追加するだけですので、特に説明はしませんね。
以前ご紹介したmysqldumpの他のオプション達と共にコマンドを書きました!

mysqldump --opt --single-transaction --order-by-primary --no-tablespaces -u[USERNAME] -p[PASSWORD] [DATABASENAME] > /path/to/file.dump

ユーザーに権限を与える

ユーザーに権限を与えるには、MySQLGRANTを使用します。
権限の付与に関しては、上記のオプションも含めて超詳しく紹介しているサイトがありますので、こちらをご覧ください。

以上!お疲れ様でした!

東京生まれ福岡育ちの文系プログラマー。
テクノロジーの恩恵を感じながら日々精進しています。
広く浅くをモットーに、最近ではプログラミングだけでなく、仮想サーバーからセキュリティ、監視システムなども勉強中です。

管理者をフォローする

コメント

タイトルとURLをコピーしました