概要
データベースを保存しておきたい時や、移行するときなどに、リストアをして移したいなど、ダンプ、リストアは必要なことが多いです。今回は、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のオプションはとても便利で、とりあえずつけておけば良い感じもします。
整合性が取れていないとダンプとしての意味を成さないので、積極的に使っていきましょう。