8.1 データベースのバックアップの必要性
データベース スキーマ、テーブルを作成し、それらを表示する方法を学習しました。また、これらのテーブルにデータを入力し、変更します。次に、最も重要なこと、つまりバックアップを作成することを学ぶ必要があります。
データベースは非常に簡単に破られてしまいます。実際、データベースは通常、常に変化している状態にあり、常に何かが保存され、追加されています。
ブラウザでタブを開いていて、その中の情報が失われないようにしたいと想像してください。決して閉じないと決めただけでは、それが最善の選択肢ではないことに同意します。結局のところ、ブラウザがフリーズしたり、誤って閉じたり、ライトが消えたり、コンピュータが焼けてしまったりする可能性があります。Windows は別の更新プログラムをインストールできますが、何が更新されるかはわかりません。
したがって、データベースは同じタブです。そして、次回のディスクへの書き込み中に問題が発生するのは時間の問題です。したがって、バックアップの作成方法を必ず学ぶ必要があります。
バックアップの作成は歯を磨くようなもので、通常の企業は毎晩各データベースの内容のバックアップを作成します。また、ハードドライブが故障したり、データセンターで火災が発生したりする可能性があるため、バックアップは通常、世界各地のデータセンターに 2 ~ 3 個のコピーとして保存されます。
バックアップを作成するには、いくつかの方法があります。
バックアップファイル。すべてのデータベース データはファイルのセットとしてディスクに保存されるため、最も簡単な方法はこれらのファイルをどこかにコピーすることです。または、まずそれを 1 つのアーカイブにアーカイブしてから、それをどこかにコピーします。
これはバックアップを作成する最も速い方法ですが、コピー/アーカイブ中にファイルが変更されないことが必要です。コピーの作成中にデータベースをフリーズする必要があります。そうしないと、コピーが歪んでしまいます。結局のところ、新しいデータの一部はデータベースに記録され、一部はまだ記録されていないという状況が発生する可能性があります。
SQL クエリの形式でバックアップします。すでにご存知のとおり、SQL サーバー データベース内のデータの追加と変更は、常に SQL クエリとして表されます。したがって、特定のテーブルの内容を SQL クエリとしてファイルに保存するように SQL サーバーに要求できます。
この方法は前の方法よりも遅くなりますが、異なる製造元の SQL サーバー間でデータを転送するのに使用できます。
また、必ずしもすべてのデータを保存する必要があるわけではありません。多くの場合、テーブル内に大量のサービス情報や古い情報があり、それを保存しないように SQL サーバーに指示できます。
また、時間を参照していくつかのイベントを保存するテーブルの場合は、単純に過去の日のイベントを選択し、それらのみを保存することができます。
さまざまなユーティリティ。企業は、データが無傷で安全に保たれるという保証を得るために、喜んで多額の費用を支払います。そこで、さまざまなIT企業があらゆる場面に対応したソリューションを提供し始めました。たとえば、ファイルの形式でデータベースのバックアップを作成できると同時に、これらのファイルが変更されないことを要求しないプログラムがあります。
たとえば、オペレーティング システムに特別なドライバーをインストールし、いつ、何が、どこで変更されたかを追跡できます。
8.2 データベースのバックアップ
Workbench は、連携するデータベースからのデータのエクスポートおよびインポートに優れています。これを行うには、メニュー項目を押すだけです: Server-> Data Export
。そして、次のようなものが表示されます。
ここで、説明を追加しましょう。
順序は次のとおりです。
- まず、エクスポートするスキーマを選択します。
- 次に、右側でバックアップするテーブルを指定します。
- 次に、何をエクスポートするかを選択する必要があります。
- データのみ。
- 構造のみ (テーブルは存在しますが、空です)。
- データと構造。
- データの保存方法を選択します。
- 各テーブルに 1 つのファイル。
- すべてのテーブルに対して 1 つのファイル。
- スキーマ作成コードをファイルの先頭に追加することもできます。これは、異なる DBMS 間でデータを転送する場合に便利です。
8.3 テーブルスキーマのバックアップ
実際のデータは使用せずに、スキーマのみをバックアップしてみましょう。
「構造のみをダンプ」を選択し、「エクスポートの開始」をクリックしました。
そして、これが Workbench が作成したファイルで見つけたものです。
--
-- Table structure for table `user`
--
DROP TABLE IF EXISTS `user`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `user` (
`id` int(11) NOT NULL,
`name` varchar(100) DEFAULT NULL,
`level` int(11) DEFAULT NULL,
`created_date` date NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
そうです、これはテーブルのスキーマであり、単一のテーブルについてそう言うことができます。
8.4 データのバックアップ
次に、スキーマ構造を除いて、データのみをバックアップしてみましょう。
[データのみをダンプ] を選択して、何が表示されるかを確認してみましょう。
そして、これが Workbench が作成したファイルで見つけたものです。
--
-- Dumping data for table `user`
--
LOCK TABLES `user` WRITE;
/*!40000 ALTER TABLE `user` DISABLE KEYS */;
INSERT INTO `user` VALUES
(1,'Ivanov Ivan',40,'2022-05-11'),
(2,'Petrov Nikola',1,'2021-05-01'),
(3,'Sidroov Vitaly',8,'2022-05-12');
/*!40000 ALTER TABLE `user` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
はい、真実と非常によく似ています。ここには、ユーザー テーブルをロックする特別なコードも表示されます。これは、この SQL スクリプトを簡単に実行できるようにするためです。この SQL スクリプトには、SQL サーバーがデータを正しく復元できるようにするためのすべての命令が含まれています。
8.5 バックアップの展開
そして最後に、バックアップからデータベースを復元します。このアクションは非常にシンプルですが便利です。
すべての生徒に特定のデータベースを持たせて、そのデータベースに対するクエリの作成方法を学習してもらいたいとします。次に、ローカルにデプロイするファイルへのリンクを提供するだけです。
また、一部のデータ、テーブル、さらにはスキーマ全体を誤って削除した場合でも、バックアップからいつでも復元できます。
データをインポートするには、メニュー内の項目をクリックする必要がありますServer-> Data Import
。すると、次の図が表示されます。
エクスポートの場合と同様に、最初にデータ ソース (ファイルのグループ、または 1 つのファイル内のすべてのデータ) を選択するよう求められます。
次に、指定したデータをアップロードするスキームを選択する必要があります。既存のスキームを選択することも、新しいスキームを作成することもできます。
重要!バックアップにデータだけでなくテーブル構造の説明も含まれている場合、テーブルは再作成されます (ターゲット スキーマにテーブルがすでに存在する場合)。
GO TO FULL VERSION