レンタルサーバーに設置したEC-CUBEやWordPressのデータベースをmysqldumpでバックアップしようとすると、次のエラーで止まることがあります。
Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces
原因 — mysqldumpの仕様変更でPROCESS権限が必要になった
MySQL 5.7.31および8.0.21以降、mysqldumpはテーブルスペース情報の取得にPROCESS権限を要求する仕様に変わりました。
PROCESS権限はサーバー上の全セッションの状態が見える強い権限のため、レンタルサーバーの共用MySQLでは一般ユーザーに付与されていないのが普通です。そのため、以前は動いていたバックアップコマンドが、サーバー側のMySQLバージョンアップを境に突然このエラーで失敗するようになります。
対処 — –no-tablespacesオプションを付ける
テーブルスペース情報は、通常のEC-CUBEやWordPressのバックアップ・復元には不要です。–no-tablespacesオプションを付けて、テーブルスペース情報の取得自体をスキップすれば解決します。
mysqldump -u ユーザー名 -p --no-tablespaces --single-transaction データベース名 > backup.sql
–single-transactionは、ダンプ中のデータ不整合を防ぐためのオプションです(InnoDBの場合)。あわせて付けておくことをおすすめします。
cronで定期バックアップを組んでいる場合は、スクリプト内のmysqldumpコマンドにも–no-tablespacesを追記してください。サーバー側のMySQLが更新されたタイミングで、気づかないうちに定期バックアップが失敗し続けていた、というケースが実際にあります。バックアップが取れているかの確認も含めた手順は、次の記事にまとめています。
権限を付与できる環境の場合
VPSや専用サーバーなどMySQLの管理権限がある環境であれば、ユーザーにPROCESS権限を付与する方法もあります。
GRANT PROCESS ON *.* TO 'ユーザー名'@'ホスト';
PROCESS権限はデータベース単位ではなくグローバルにしか付与できない点に注意してください。バックアップ用途であれば、権限を増やすより–no-tablespacesで回避する方が安全です。
EC-CUBEに関するお問い合わせ
[重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。