MySQLでデータベースをdumpする

そもそもdumpとは?

dumpはバックアップに近しい概念であるという認識で大丈夫だと思います。 データの貯蔵庫の役割を果たしているのがデータベースなわけですが、 データベースが不測の事態により失われてしまっては元も子もありません。 そういう事情からデータベースをdumpしておくことが要請されるのです。

どうやんのさ?

ここでは以下のような簡易なテーブルを持ったtestという名前のデータベースを dumpすることを考えます。

mysql> SHOW TABLES;
+----------------+
| Tables_in_test |
+----------------+   #user_infoというテーブルがある
| user_info      |
+----------------+

mysql> DESC user_info;    #テーブルの構造
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | varchar(55) | YES  |     | NULL    |       |
| name  | varchar(55) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

mysql> SELECT * FROM user_info;
+-------+-------+
| id    | name  |
+-------+-------+    
| user1 | user1 |    #テーブルの中身
| user2 | user2 |
| user3 | user3 |
+-------+-------+
3 rows in set (0.00 sec)

ここからさっそくdumpしていきます。

mysqldump -u root test > dump.txt

#testの部分はdumpしたいデータベース名、dump.txtの部分はdump先のファイルなので適当な名前にすれば良い。

ここでlsコマンドを実行するとdump先のファイルが作られていることが確認できます。また普通のファイルなのでvimコマンドを使えば中身も確認することができます。 ここまででdumpの作業は終わりです。次にリストアの仕方を確認します。

リストア

その名の通り、リストアというのは復元のことを指します。 流れとしては 1.復元先のデータベースをMySQLで用意しておく 2,リストア用のコマンドを実行する という感じです。

以下では実際に先程dumpしたデータベースを復元してみます。

mysql> CREATE DATABASE db_new;
mysql> exit
mysql -u root db_new < dump.txt 

復元できているか実際にdb_newの中身を見てみる。

mysql> USE db_new;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> SHOW TABLES;
+------------------+
| Tables_in_db_new |
+------------------+
| user_info        |
+------------------+
1 row in set (0.00 sec)

mysql> DESC user_info;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | varchar(55) | YES  |     | NULL    |       |
| name  | varchar(55) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> SELECT * FROM user_info;
+-------+-------+
| id    | name  |
+-------+-------+
| user1 | user1 |
| user2 | user2 |
| user3 | user3 |
+-------+-------+
3 rows in set (0.00 sec)

もとのデータベースと完全に一致していることがわかります。