MySQLのdumpコマンドを使用してデータベースをバックアップしようとしましたが、コマンドが失敗し、エラーメッセージ「エラー:アクセスが拒否されました。この操作には(少なくとも1つの)PROCESS特権が必要です。 。これが完全なエラーメッセージです。
$ mysqldump -u dbuser -p tg_db > tg_db.sql Enter password: mysqldump: Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces
私は何年もの間このようなデータベースをダンプしてきましたが、コマンドが突然失敗しました。このエラーをどのように解決しましたか?どうぞ。
修正エラー:アクセスが拒否されました。この操作には(少なくとも1つの)PROCESS特権が必要です
私がしたのは、「--no-tablespaces
」を追加することだけでした 以下に示すように、コマンドの‘オプション:
$mysqldump -u dbuser -p tg_db --no-tablespaces > tg_db.sql
そしてそれはうまくいった。つまり、--no-tablespaces
とは何ですか オプションと、なぜそれを追加する必要があるのですか?
この変更はMySQLバージョン5.7.31+から発生し、サーバーにインストールされているバージョンは8.0.23でした。ドキュメントによると、
mysqldump 少なくとも、ダンプされたテーブルにはSELECT権限、ダンプされたビューにはSHOW VIEW、ダンプされたトリガーにはTRIGGER、–single-transactionオプションが使用されていない場合はLOCK TABLES、(MySQL 8.0.21以降)–no-tablespacesの場合はPROCESSが必要です。オプションは使用されません。オプションの説明に記載されているように、特定のオプションには他の特権が必要な場合があります。
–no-tablespacesオプションも確認してください。このオプションは、CREATE LOGFILE GROUP
を削除します およびCREATE TABLESPACE
出力からのステートメント。
しかし、なぜPROCESS
mysqldump
には特権が必要です 指図? mysqldump
のため INFORMATION_SCHEMA.FILES
にアクセスしようとします PROCESS特権を必要とするテーブル。さて、特権はGRANT
を介して追加できます グローバルレベル、または単一のデータベースまたはテーブル。しかし、PROCESS
以下に示すように、特権をグローバルレベルで追加する必要があります。
GRANT PROCESS ON *.* TO user@localhost;
このエラーがすべてのユーザーに表示されないのはなぜですか?明らかに、MySQLのrootユーザーは影響を受けません。他のユーザーの場合、特権レベルに基づいて動作が異なる場合があります。