[MySQL]データベースダンプ、リストア方法

概要

データベースを保存しておきたい時や、移行するときなどに、リストアをして移したいなど、ダンプ、リストアは必要なことが多いです。
今回は、MySQLのコマンドである、mysqldumpを使って、データベースのダンプ、リストアを行おうと思います。

ダンプ方法

ダンプをするとき、データベースが止まっているとは限りません。データベースを動かしながらダンプを行ったりすることもあるかと思います。
その場合でも、整合性が取れるオプションなどもあるので、その場合のオプションなども情報として載せつつ、ダンプのコマンドを紹介していきます。

一つのデータベースのデータをダンプしたい場合
# mysqldump -u DBユーザ名 -p DB名 > 出力先ファイル名

全部のデータベースをダンプしたい場合、DB名を指定せずに--all-databasesのオプションを付けることで全てのデータをダンプすることができます。

ただし、このままではデータベースが動いた状態で、時間のかかるダンプだと整合性が取れなくなってしまうため、次のオプションを使いましょう。
# mysqldump --single-transaction -u DBユーザ名 -p DB名 > 出力先ファイル名

--single-transactionを使うことで、仮に一時間かかるダンプでも、トランザクションを利用してくれるので、整合性のあるデータになります。

また、全データベースのダンプをする際には、-xのオプションを使ったほうが良いです。
全てのテーブルをロックして行うオプションで、バックアップ中のデータベースの書き込みを禁止できます。

データベースが止めれる状態にあるのであれば、止めた状態でダンプはした方が良いです。

リストア方法

リストア時は、mysqldumpのコマンドは使いません。
mysqlコマンドのみでできます。
1つデータベースをリストアするコマンドは次になります。
# mysql -u ユーザー名 -p データベース名 < dumpファイル名

全データベースをリストアするのであれば、データベース名はいれないで、行うとできます。
# mysql -u ユーザー名 -p < dumpファイル名

以上でリストアが出来ていると思います。
出来ているかの確認は、phpMyAdminや、実際にmysqlでSHOW DATABASES;などで確認しましょう。

総括

データベースの移行の方法は様々ですが、いざという時のバックアップや、テストをしたいときのコピーを取るなどにも使えて便利です。
レプリケーションを取る方法もありますが、特定のデータベースのみとなるとダンプの方がやりやすいですね。

–single-transactionのオプションはとても便利で、とりあえずつけておけば良い感じもします。
整合性が取れていないとダンプとしての意味を成さないので、積極的に使っていきましょう。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です