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