そんな時のためにMySQLにはデータベースをバックアップ・復元(リストア)する機能があります。
コンピュータのハードディスクは消耗品ですので、いつかは壊れることを前提に考えて、定期的にバックアップしておけば、いざという時に復元できるので安心です。
データベースをバックアップ・復元するには、その権限を持ったユーザーで行ないます。「root」でも「pgtop」でもOKです。
今回はMySQLの接続、終了を繰り返します。手順がこれまでと違いますので気を付けてください。接続するユーザーは「pgtop」とします。
【1】MySQLを開始します。
1.コマンドプロンプトを起動します。
2.「net start mysql」と入力し、「Enterキー」を押します。
*まだ接続はしません。
【2】データベースのバックアップを行ないます。
1.以下のように入力し、「Enterキー」を押します。
mysqldump -u pgtop -p SampleDB040 > "C:\mysql\data\sampledb040\backup.sql"
2.パスワードを求められるので「12345」入力し、「Enterキー」を押します。
バックアップはこれだけで完了です。簡単ですね。
【3】指定した場所にバックアップされているか確認してみましょう。
*「\」はWindowsではエンマークのことです。
C:\mysql\data\sampledb040
バックアップファイルをTeraPadで開いた様子
バックアップファイルの中身は複数のSQL文だということがわかります。
【4】次はMySQLに接続します。
1.「mysql -u pgtop -p -b」と入力し、「Enterキー」を押します。
2.パスワードを求められるので「12345」入力し、「Enterキー」を押します。
*「-b」オプションを付けて起動するとビープ音が出なくなります。
【5】以下のSQL文を入力し、使用するデータベースを選択します。
USE SampleDB040;
【6】以下のSQL文を入力し、データベース内にあるテーブルを確認します。
SHOW TABLES;
2つのテーブルがありますが、これから削除します。
【7】以下のSQL文を入力して実行し、データベース内にあるテーブルを削除します。
DROP TABLE T01Prefecture;
DROP TABLE T00Area;
【8】もう一度データベース内にあるテーブルを確認すると、データベースは空です。
SHOW TABLES;
【9】いったんMySQLを終了します。
ここからは復元(リストア)を行なう手順です。
【10】指定する場所「C:\mysql\data\sampledb040」にバックアップするファイル「backup.sql」があることを確認します。
*「\」はWindowsではエンマークのことです。
【11】データベースの復元を行ないます。
1.以下のように入力し、「Enterキー」を押します。
mysql -u pgtop -p SampleDB040 < "C:\mysql\data\sampledb040\backup.sql"
2.パスワードを求められるので「12345」入力し、「Enterキー」を押します。
これでデータベースの復元が完了しました。
【12】確認のためMySQLに接続します。
1.「mysql -u pgtop -p -b」と入力し、「Enterキー」を押します。
2.パスワードを求められるので「12345」入力し、「Enterキー」を押します。
【13】以下のSQL文を入力し、使用するデータベースを選択します。
USE SampleDB040;
【14】以下のSQL文を入力し、データベース内にあるテーブルを確認します。
SHOW TABLES;
テーブルが元に戻っています。テーブルの中身はどうでしょうか?
【15】以下のSQL文を入力し、テーブルのデータを確認します。
SELECT * FROM T01Prefecture;
SELECT * FROM T00Area;
テーブルの中身も元に戻っていますね。
【16】以下の図を参考にMySQLを終了・停止します。
1.「exit」と入力し、「Enterキー」を押します。
2.「net stop mysql」と入力し、「Enterキー」を押します。
【17】コマンドプロンプトは閉じてください。
【解説】
(1)バックアップについて
mysqldump -u pgtop -p SampleDB040 > "C:\mysql\data\sampledb040\backup.sql"
ファイルの拡張子は「.sql」でなくてもかまいません。
パスを省いてファイル名だけ指定すると、Cドライブの直下にバックアップされます。
例 mysqldump -u pgtop -p SampleDB040 > "backup.sql"
(2)復元について
mysql -u pgtop -p SampleDB040 < "C:\mysql\data\sampledb040\backup.sql"
「backup.sql」の中身はSQL文です。つまりこのコマンドはSQL文をバッチ処理しているだけですので、復元以外にも使えます。
*復元するにはデータベースは作成済みでなければならないため、テーブルは削除しましたがデータベースは削除しませんでした。
(3)「backup.sql」の中身
前半はほとんどコメントなのでSQL文の部分だけ説明します。
・既にテーブルが存在する場合は削除します。
DROP TABLE IF EXISTS `t00area`;
*「`」は半角で「SHIFTキー+@」です。書かなくても大丈夫です。
・テーブルを作成しています。
CREATE TABLE `t00area` (
`AREA_CD` int(3) NOT NULL default '0',
`AREA_NAME` varchar(10) default NULL,
PRIMARY KEY (`AREA_CD`)
) ENGINE=InnoDB DEFAULT CHARSET=sjis;
*「ENGINE=InnoDB」はデータベースのタイプ、「DEFAULT CHARSET=sjis;」は文字コードですが、書かなくてもデフォルトで設定されます。
・テーブルをロックしてデータを追加します。
LOCK TABLES `t00area` WRITE;
/*!40000 ALTER TABLE `t00area` DISABLE KEYS */;
INSERT INTO `t00area` VALUES (1,'北海道・東北'),(2,'関東'),(3,'信越・北陸'),(4,'東海'),(5,'近畿'),(6,'中国'),(7,'四国'),(8,'九州・沖縄');
/*!40000 ALTER TABLE `t00area` ENABLE KEYS */;
UNLOCK TABLES;
T01Prefectureについても上記と同様です。