MySQLをアップデートした後、いつものようにデータベースのバックアップをしようとmysqldumpコマンドを実行したら、以下のようなエラーが表示されました。
どうやら、mysqldumpでtablespaces?をダンプする際には、プロセス特権(PROCESS privilege(s))が必要らしいです。。
今回はこのエラーの原因と対処法をご紹介します!
mysqldumpの使い方や最適なオプションについてはこちらから!
プロセス特権エラーの原因
それでは、原因を特定するために、冷静になって今一度エラーの内容を確認してみましょう!
1 |
mysqldump: Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces |
英語わかんないw
いつものごとく、Google翻訳に頼ります!
1 |
mysqldump:エラー:'アクセスが拒否されました;表領域をダンプしようとするときは、この操作にPROCESS特権(少なくとも1つ)が必要です。 |
ふむふむ。tablespacesはどこかの表領域のことで、それをダンプしようとするとPROCESS特権がなくてエラーになるらしい。。
バックアップファイルは出力されたみたいだけど…どうして?
MySQLをアップデートする前は表示されてなかったのに…。
これだけだと、なぜ突然エラーになったか分からないので、MySQLのバージョンを確認して公式サイトのリリースノートをみてみましょう。
MySQL公式のリリースノートを確認
ありました!
MySQL 5.7.31で以下のような記述を発見しました。
2020年7月の情報か…MySQLのバージョンかなり古かったんだな…。
Security Notes
引用:MySQL :: MySQL 5.7 Release Notes :: Changes in MySQL 5.7.31 (2020-07-13, General Availability)
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)
何となく理解できましたね!
tablespcesとはINFORMATION_SCHEMA.FILESで、MySQL 5.7.31以降から、このテーブルにアクセスするためにPROCESS特権が必要になったそうな。。
ちなみに、原因と一緒に対処法も書いてありましたね!
2つの対処法
ここまで読んだら察しはついたと思いますが、対処法は以下の2つ。
公式サイトに記載があると通り、mysqldumpのコマンドに[–no-tablespaces]オプションを付けるか、mysqldumpを実行するユーザーにプロセス特権がないのなら、権限を与えるの2択になります。
- ユーザーに権限を与える
- –no-tablespacesオプションを付ける
- ユーザーに権限を与える
–no-tablespacesオプションを追加する
この対処法は、ただmysqldumpに[–no-tablespaces]オプションを追加するだけですので、特に説明はしませんね。
以前ご紹介したmysqldumpの他のオプション達と共にコマンドを書きました!
1 |
mysqldump --opt --single-transaction --order-by-primary --no-tablespaces -u[USERNAME] -p[PASSWORD] [DATABASENAME] > /path/to/file.dump |
ユーザーに権限を与える
ユーザーに権限を与えるには、MySQLのGRANT文を使用します。
権限の付与に関しては、上記のオプションも含めて超詳しく紹介しているサイトがありますので、こちらをご覧ください。
以上!お疲れ様でした!
コメント