【MySQL】データベースのバックアップとリストア

2021年9月11日

バックアップ

特定のデータベースのみバックアップする

mysqldump --single-transaction -u [DBユーザ名] -p [DB名] > [出力先ファイル名]

全てのデータベースをバックアップする

mysqldump --single-transaction -u [DBユーザ名] -p -x --all-databases > [出力ファイル名]

エラー: ユーザにPROCESS権限がない

mysqldumpコマンドを実行したとき、以下エラーが発生することがあります。

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

実際のエラー文

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

Google翻訳した結果

これはmysqldumpコマンドを実行する[DBユーザ名]にPROCESS権限がないことが原因です。PROCESS権限とはデータベース側で作成したファイルなどを触るために必要な権限です。

PROCESS 権限は、サーバー内で実行するスレッドについての情報の表示に関係します (つまり、セッションによって実行されるステートメントについての情報)。この権限は、SHOW PROCESSLIST または mysqladmin processlist を使用して、ほかのアカウントに属するスレッドを表示することを可能にし、自分自身のスレッドを表示することもできます。PROCESS 権限は、SHOW ENGINE の使用も可能にします。

PROCESS 権限は、パスワードの設定や変更を行うステートメントなどを含め、現在実行中のステートメントのプレーンテキストを表示することができます。

By MySQL Documentation

解決方法としては[DBユーザ名]にPROCESS権限を持たせます。

GRANT PROCESS ON *.* TO '[DBユーザ名]';

ただし権限を本当に持たせていいのか判断をしっかりするようにしましょう。

リストア(復元)

特定のデータベースのみ復元する

mysql -u [DBユーザ名] -p [DB名] < [出力先ファイル名]

全てのデータベースをリストアする

mysql -u [DBユーザ名] -p < [出力先ファイル名]

最後に

バックアップとリストアは急に必要になりますよね。細かなオプションも覚えていると便利ですが、とりあえずデータベースを指定出来ればいいかなって思います。

ほな、また

SPECIAL THANKS

Qiitamysqlバックアップの取り方

MySQLDump で tablespaces の PROCESS privilege エラーが出だした時の対処方法
MySQL6.2.1 MySQL で提供される権限
いっさいがっさい
プログラマブル弁理士のブログ
MysqldumpでPROCESS権限(PROCESS Privilege)を要求される
参考サイト様