MySQLの使い方【バックアップ編】

永井
2022-10-20
2022-10-20

はじめに


本記事ではMySQLのダンプとリストアについて説明します。
基本編で作成したDBを使用するため、先にそちらを確認することをおすすめします。

バックアップ編は以下の内容になっています。
1. ダンプのやり方
2. リストアのやり方

ダンプのやり方


DBにおけるダンプとは、DBの情報をファイルに書き出し保存することです。

コマンド
[ mysqldump -u ユーザ名 -pパスワード DB名 > ダンプファイル名 ]
※パスワードを設定していない場合「-pパスワード」の部分は必要ない



mysqldump -u root -phoge hoge > dumpfile.sql


生成されたファイルを確認する。


cat dumpfile.sql


出力結果
---------------------------------------------------------------------------------------------------
~~~~~~
CREATE TABLE `user` (
`id` int NOT NULL AUTO_INCREMENT,
`name` text,
`duty` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb3;

~~~~~~
INSERT INTO `user` VALUES (1,'田中',0),(3,'佐藤',1),(4,'野比',0),(5,'骨川',0);
~~~~~~
---------------------------------------------------------------------------------------------------
生成されたファイルには作成したテーブルやカラム、追加されていたデータなどが確認できる。

このように、ダンプ時のDBを再現できるようにMySQLのコマンドが記載される。

リストア


リストアとはバックアップした時の状態に復元することである。

そこで先ほど生成したダンプファイルを使う。

現状の確認
mysql> select * from user;
---------------------------------------------------------------------------------------------------
#出力結果
+----+--------+------+
| id | name   | duty |
+----+--------+------+
| 1  | 田中   |    0 |
| 3  | 佐藤   |    1 |
| 4  | 野比   |    0 |
| 5  | 骨川   |    0 |
+----+--------+------+
4 rows in set (0.00 sec)
---------------------------------------------------------------------------------------------------

間違えて骨川さんのデータを削除してしまったとします。


mysql> delete from user where id = 5;
Query OK, 1 row affected (0.03 sec)

mysql> select * from user;

---------------------------------------------------------------------------------------------------
#出力結果
+----+--------+------+
| id | name   | duty |
+----+--------+------+
| 1  | 田中   |    0 |
| 3  | 佐藤   |    1 |
| 4  | 野比   |    0 |
+----+--------+------+
3 rows in set (0.00 sec)
---------------------------------------------------------------------------------------------------

ここでリストアします。
コマンド
[ mysql -u ユーザ -pパスワード -D DB名 < ダンプファイル名 ]

mysql -u root -phoge -D hoge < dumpfile.sql


確認
mysql> select * from user;
---------------------------------------------------------------------------------------------------
+----+--------+------+
| id | name   | duty |
+----+--------+------+
| 1  | 田中   |    0 |
| 3  | 佐藤   |    1 |
| 4  | 野比   |    0 |
| 5  | 骨川   |    0 |
+----+--------+------+
4 rows in set (0.00 sec)
---------------------------------------------------------------------------------------------------

骨川さんがしっかりと戻っていることが確認できます。

今回は、ダンプもリストアも同じDBで行いましたが、リストアを他のDBを指定して実行することも可能です。

新しく「fuga」というDBを作成しました。

mysql> show tables;
#出力結果
Empty set (0.00 sec)

ここで先ほどのリストアコマンドのDB名を「fuga」にして実行します。

mysql -u root -phoge -D fuga < dumpfile.sql

確認
mysql> show tables;
---------------------------------------------------------------------------------------------------
#出力結果
+----------------+
| Tables_in_fuga |
+----------------+
| user           |
+----------------+
1 row in set (0.00 sec)
---------------------------------------------------------------------------------------------------
テーブルが追加されていることが確認できます。

では、中身も確認してみましょう。


mysql> select * from user;

---------------------------------------------------------------------------------------------------
#出力結果
+----+--------+------+
| id | name   | duty |
+----+--------+------+
| 1  | 田中   |    0 |
| 3  | 佐藤   |    1 |
| 4  | 野比   |    0 |
| 5  | 骨川   |    0 |
+----+--------+------+
4 rows in set (0.00 sec)
---------------------------------------------------------------------------------------------------


中身も全く同じ状態です。

まとめ


MySQLのバックアップ方法について説明してきました。
ダンプはバックアップファイルの生成。リストアは復元と覚えておくと良いかもしれないです。
応用方法としてはcronを使って自動バックアップなどもできるかと思います。

ありがとうございました。