AR ホームベーカリー

オイラのアウトプット用ホームベーカリー!

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

なん……何? (ここ数年 RDS ばかり使っていたので、生 MySQL を久しぶりに使った顔

ロケ地

  • CentOS7
  • MySQL 8.0.22 community edition
  • 該当ユーザの権限
    • GRANT ALL PRIVILEGES ${データベース名}.* ON ${ユーザ名}@localhost;

PROCESS 権限が足りない

mysqldump を実行したところ、表題のエラーが出た。 どうも PROCESS 権限が足りないらしいが、ダンプを取得したいデータベースに対して操作しているユーザは GRANT ALL している。 なん、なに?

dev.mysql.com

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)

訳すとこう!

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

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

CREATE LOGFILE GROUPCREATE TABLESPACE 用の情報を mysqldump に含めないオプションらしく。 明示的に CREATE LOGFILE GROUP などしていないので、アプリケーションの規模も小さいし除外してしまっていいかな、という感じで、権限付与せずロングオプションを利用することで回避することにしました。 こんなかんじ。

mysqldump -u ${ユーザ} -p -h localhost --no-tablespaces ${データベース名} > ~/db_dump/`date "+%Y%m%d%H%M%S"`-${PREFIX}.sql

dev.mysql.com

参考

isgs-lab.com