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。然後你會看到這張圖:

與導出的情況一樣,首先會提示您選擇數據源:一組文件或一個文件中的所有數據。

然後您需要選擇將指定數據上傳到的方案。您可以選擇現有方案或創建新方案。

重要的!如果您的備份不僅包含數據,還包含表結構的描述,那麼將重新創建表(如果目標模式中已經有任何表)。