8.1 数据库备份的必要性

您已经学习了如何创建数据库模式、表以及查看它们。还要用数据填充这些表并更改它们。现在您需要学习最重要的事情 - 进行备份。

数据库很容易坏。事实上,数据库通常处于不断变化的状态:不断地保存和添加一些东西。

想象一下,您在浏览器中打开了一个选项卡,并且您不希望其中的信息丢失。同意,如果您只是决定永远不关闭它,那么这将不是最佳选择。毕竟,浏览器可能会死机,可能会意外关闭,您可能会失光或烧毁您的计算机。Windows 可以安装另一个更新,但你永远不知道会安装什么。

所以,你的数据库是同一个选项卡。下次写入磁盘时出现问题只是时间问题。因此,您绝对需要学习如何进行备份。

备份就像刷牙一样,一般的公司每晚都会备份每个数据库的内容。而且由于硬盘驱动器也可能发生故障并且数据中心发生火灾,因此备份通常以 2-3 个副本的形式存储在世界不同地区的数据中心。

有多种创建备份的方法。

备份文件。由于所有数据库数据都作为一组文件存储在磁盘上,最简单的方法是简单地将这些文件复制到某个地方。或者先归档到一个归档中,然后再复制到某个地方。

这是进行备份的最快方法,但它要求文件在复制/存档时不会更改。创建副本时必须冻结数据库,否则副本会歪。毕竟可能会出现这样的情况,有些新数据已经记录在数据库中,有些还没有。

以 SQL 查询的形式备份。如您所知,在 SQL Server 数据库中添加和更改数据始终表示为 SQL 查询。因此,您可以要求 SQL 服务器以 SQL 查询的形式将特定表或表的内容保存到文件中。

这种方法比上一种慢,但是可以用来在不同厂商的SQL服务器之间传输数据。

此外,并非所有数据都需要保存。通常你的表中有一堆服务或过时的信息,你可以告诉 SQL 服务器不要保存它。

此外,对于存储一些参考时间的事件的表,您可以简单地选择最后一天的此类事件并仅存储它们。

各种实用程序。公司愿意支付大量资金来保证他们的数据将保持完整和安全。因此,各种IT公司开始提供适用于所有场合的解决方案。例如,有一些程序可以以文件的形式制作备份数据库,同时又不要求这些文件不发生变化。

例如,您可以在操作系统中安装特殊的驱动程序,并跟踪更改的时间、内容和位置。

8.2 备份数据库

Workbench 非常擅长从它所使用的数据库中导出和导入数据。为此,您只需按菜单项:Server-> Data Export。你会看到这样的东西:

现在让我们添加一些解释:

顺序是这样的:

  1. 首先,选择要导出的一个或多个模式。
  2. 然后在右侧我们指定要备份的表。
  3. 接下来,我们必须选择要导出的内容:
    • 仅数据;
    • 仅结构(表格将是,但为空);
    • 数据和结构。
  4. 选择如何保存数据:
    • 每个表一个文件;
    • 所有表的一个文件。
  5. 您还可以将架构创建代码添加到文件顶部。这在不同 DBMS 之间传输数据时很有用。

8.3 备份表模式

让我们只备份模式,不备份实际数据。

我选择了 Dump Structure Only 并单击 Start Export。

这就是我在 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 备份数据

现在让我们只备份数据,但不备份模式结构。

让我们选择 Dump Data Only 看看他们给我们什么:

这就是我在 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 服务器正确恢复数据的所有指令。

8.5 部署备份

最后,最后一件事是从备份中恢复数据库。这个动作非常简单但很有用。

假设我希望我所有的学生都有一个特定的数据库,这样你就可以学习如何在上面编写查询。然后我会给你一个链接到你在本地部署的文件,仅此而已。

即使您不小心删除了一些数据、表格甚至整个架构,也始终可以从备份中恢复。

为了导入数据,您需要单击菜单中的项目Server-> Data Import。然后你会看到这张图:

与导出的情况一样,首先会提示您选择数据源:一组文件或一个文件中的所有数据。

然后您需要选择将指定数据上传到的方案。您可以选择现有方案或创建新方案。

重要的!如果您的备份不仅包含数据,还包含表结构的描述,那么将重新创建表(如果目标模式中已经有任何表)。