【完全解決】mysqldumpのDBバックアップで「Access denied」エラーが出た時の対処方法【cron・さくらレンタルサーバー・MySQL5.7】

さくらのレンタルサーバーで、MySQLのDBバックアップで、毎回、エラーが出るようになりました。

解決方法が分かりましたので、備忘録の意味も兼ねてまとめました。

発生したエラー

さくらのレンタルサーバーで、cronによりMySQLのバックアップ処理を日次で行っていたところ、下記のエラーが出るようになりました。

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

突然、エラーが出るようになりまして、100%の確率で発生しています。

訳すと以下の通りとなります。

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

「Access denied(アクセス距離)」「need(必要)」「privilege(権限)」といったき刺激的な言葉が並んでいますが、DBバックアップ自体は正常に行えています。

筆者の環境ではエラー内容がメールで送られてきますので、毎回、送信されてきて煩わしいのですが、気にしないのであれば、不都合はありません。

エラーが発生する要因

エラーが発生するようになったのは、MySQLのバージョンを5.7にアップグレードしてからです。

筆者はさくらのレンタルサーバーで、複数台利用していて、MySQLのDBは合計で10ヶほど利用しています。

バージョンアップを行ったところでは、全てでこのエラーが出ていますので、MySQLを5.7にアップグレードしたことが影響していることは間違いありません。

解決方法

mysqldump コマンドに「-no-tablespaces」オプションを加えるだけです。

これでエラーが100%出なくなりましたし、同様の事例を調べてみると、同じ方法で解決している報告事例が多数見つかります。

<修正前>

mysqldump -q –host=[ホスト名] –user=[ユーザーID] –password=[DBパスワード] [DB名]> $DBDUMP_FILE

<修正後>

mysqldump -q –host=[ホスト名 –user=[ユーザーID] –password=[DBパスワード] [DB名] –no-tablespaces> $DBDUMP_FILE

–no-tablespaces オプションとは?

「–no-tablespaces」って何?と気になったかたもいると思います。

–no-tablespaces CREATE LOGFILE GROUP ステートメントおよび CREATE TABLESPACE ステートメントを出力に書き出さない

オプションの意味を調べてみましたが、意味が良く分かりませんでした。

筆者とは関係のないことのようなので、これ以上は調べませんでしたが、興味がある方は、ログファイルグループとテーブルスペースについて調べてみてください。

あわせて読みたい