8.1 数据库备份的必要性
您已经学习了如何创建数据库模式、表以及查看它们。还要用数据填充这些表并更改它们。现在您需要学习最重要的事情 - 进行备份。
数据库很容易坏。事实上,数据库通常处于不断变化的状态:不断地保存和添加一些东西。
想象一下,您在浏览器中打开了一个选项卡,并且您不希望其中的信息丢失。同意,如果您只是决定永远不关闭它,那么这将不是最佳选择。毕竟,浏览器可能会死机,可能会意外关闭,您可能会失光或烧毁您的计算机。Windows 可以安装另一个更新,但你永远不知道会安装什么。
所以,你的数据库是同一个选项卡。下次写入磁盘时出现问题只是时间问题。因此,您绝对需要学习如何进行备份。
备份就像刷牙一样,一般的公司每晚都会备份每个数据库的内容。而且由于硬盘驱动器也可能发生故障并且数据中心发生火灾,因此备份通常以 2-3 个副本的形式存储在世界不同地区的数据中心。
有多种创建备份的方法。
备份文件。由于所有数据库数据都作为一组文件存储在磁盘上,最简单的方法是简单地将这些文件复制到某个地方。或者先归档到一个归档中,然后再复制到某个地方。
这是进行备份的最快方法,但它要求文件在复制/存档时不会更改。创建副本时必须冻结数据库,否则副本会歪。毕竟可能会出现这样的情况,有些新数据已经记录在数据库中,有些还没有。
以 SQL 查询的形式备份。如您所知,在 SQL Server 数据库中添加和更改数据始终表示为 SQL 查询。因此,您可以要求 SQL 服务器以 SQL 查询的形式将特定表或表的内容保存到文件中。
这种方法比上一种慢,但是可以用来在不同厂商的SQL服务器之间传输数据。
此外,并非所有数据都需要保存。通常你的表中有一堆服务或过时的信息,你可以告诉 SQL 服务器不要保存它。
此外,对于存储一些参考时间的事件的表,您可以简单地选择最后一天的此类事件并仅存储它们。
各种实用程序。公司愿意支付大量资金来保证他们的数据将保持完整和安全。因此,各种IT公司开始提供适用于所有场合的解决方案。例如,有一些程序可以以文件的形式制作备份数据库,同时又不要求这些文件不发生变化。
例如,您可以在操作系统中安装特殊的驱动程序,并跟踪更改的时间、内容和位置。
8.2 备份数据库
Workbench 非常擅长从它所使用的数据库中导出和导入数据。为此,您只需按菜单项:Server-> Data Export
。你会看到这样的东西:
![](https://cdn.codegym.cc/images/article/3bc1564d-b5cb-4378-9968-570697e9603a/1024.jpeg)
现在让我们添加一些解释:
![](https://cdn.codegym.cc/images/article/821a37d4-c6f3-4ccf-80bf-4873f3d8d061/1024.jpeg)
顺序是这样的:
- 首先,选择要导出的一个或多个模式。
- 然后在右侧我们指定要备份的表。
- 接下来,我们必须选择要导出的内容:
- 仅数据;
- 仅结构(表格将是,但为空);
- 数据和结构。
- 选择如何保存数据:
- 每个表一个文件;
- 所有表的一个文件。
- 您还可以将架构创建代码添加到文件顶部。这在不同 DBMS 之间传输数据时很有用。
8.3 备份表模式
让我们只备份模式,不备份实际数据。
我选择了 Dump Structure Only 并单击 Start Export。
![](https://cdn.codegym.cc/images/article/18f4743c-0edb-468b-8408-52f59c75a20f/1024.jpeg)
这就是我在 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 看看他们给我们什么:
![](https://cdn.codegym.cc/images/article/b81bb769-5767-4f8a-9a45-bf36e59746e2/1024.jpeg)
这就是我在 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
。然后你会看到这张图:
![](https://cdn.codegym.cc/images/article/3e3e48d4-9f99-4fa1-a2cb-121920583570/1024.jpeg)
与导出的情况一样,首先会提示您选择数据源:一组文件或一个文件中的所有数据。
然后您需要选择将指定数据上传到的方案。您可以选择现有方案或创建新方案。
重要的!如果您的备份不仅包含数据,还包含表结构的描述,那么将重新创建表(如果目标模式中已经有任何表)。
GO TO FULL VERSION