🖥

mysqldump コマンド & mysqlコマンドでデータベースをバックアップ・復元する ( そもそもmysqldumpとは? )

2023/09/01に公開

バックアップのコマンド例

例: 全てのデータベースをバックアップする場合

mysqldump -u root -p --all-databases > db.dump

mysqldumpコマンドは現在のデータベースの状態を、SQLコマンドとして標準出力する。
(SQLコマンドが出力されるところがツボだ! バックアップ用の特殊形式のデータとかではないのだ)

ファイルへの記録

上のコマンド例では、それをシェルのリダイレクト ( > ) で、ファイルとして記録してバックアップにしている。ファイル名やファイルの場所は何でも良い。

リダイレクト ( > ) をしないと、単に標準出力にSQLコマンドが吐き出されるので、見てみると良いだろう。

復元のコマンド例

mysql -u root -p < db.dump

これは先程のバックアップファイルをリダイレクト ( < ) で読んで、mysqlコマンドとして実行しているだけだ。

復元の場合はmysqldumpコマンドではないことに注意。
なぜならmysqldumpで作ったファイルは「SQLコマンドの羅列」なので、SQLコマンドを実行することが復元になるからだ。

なぜデータベースが復元できるのか?

mysqldumpで出力されるSQLの例を見てみよう。

テーブルを削除してから、元のスキーマ通りに再度テーブル作成をするSQLコマンドが出力されているのが分かる。

さらにその後に、INSERTで元のデータを追加している行も分かるだろう。
こうやってSQLコマンドをうまく使って、データ復元ができるわけだ。(スマートな仕組み!)

...
DROP TABLE IF EXISTS `posts`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `posts` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `content` varchar(255) DEFAULT NULL,
  `avatar` varchar(255) DEFAULT NULL,
  `created_at` datetime(6) NOT NULL,
  `updated_at` datetime(6) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;


--
-- Dumping data for table `posts`
--

LOCK TABLES `posts` WRITE;
/*!40000 ALTER TABLE `posts` DISABLE KEYS */;
INSERT INTO `posts` VALUES (1,NULL,NULL,'2022-07-14 22:44:00.105766','2022-07-14 22:44:00.105766'),(2,NULL,NULL,'2022-07-14 22:44:01.466996','2022-07-14 22:44:01.466996'),(3,'AAA',NULL,'2022-07-14 22:44:07.754683','2022-07-14 22:44:07.754683'),(4,'AAA',NULL,'2022-07-14 22:44:08.422140','2022-07-14 22:44:08.422140'),(5,'AAA',NULL,'2022-07-14 22:44:08.854483','2022-07-14 22:44:08.854483');
/*!40000 ALTER TABLE `posts` ENABLE KEYS */;
UNLOCK TABLES;
...

上の例は一部だが、全文を見るとスキーマデータの復元も含めて色々やってくれているのが分かると思う。

ちなみにコメント行にはもちろん動作には影響がない。

参考

https://tex2e.github.io/blog/database/mysql-dump-restore

https://qiita.com/PlanetMeron/items/3a41e14607a65bc9b60c

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

Twitter

https://twitter.com/YumaInaura

公開日時

2022-07-15

Discussion