MySQL 數據庫管理系統通常會采用有效的措施來維護數據庫的可靠性和完整性。但是在數據庫的實際使用過程當中,仍存在着一些不可預估的因素,會造成數據庫運行事務的異常中斷,從而影響數據的正確性,甚至會破壞數據庫,導致數據庫中的數據部分或全部丟失。
數據庫系統提供了備份和恢復策略來保證數據庫中數據的可靠性和完整性。
數據庫備份
數據庫備份是指通過導出數據或者復制表文件的方式來制作數據庫的副本。當數據庫出現故障或遭到破壞時,將備份的數據庫加載到系統,從而使數據庫從錯誤狀態恢復到備份時的正確狀態。
可以使用 SELECT INTO OUTFILE 語句把表數據導出到一個文本文件中進行備份。
注意:這種方法只能導出或導入數據的內容,而不包括表的結構。若表的結構文件損壞,則必須先設法恢復原來表的結構。
【實例】將數據庫 test_db 的表 tb_students_info 的全部數據備份到 C 盤的數據備份目錄下文件名為 file.txt 的文件中,要求每個字段用逗號分開,並且字符用雙引號標注,每行以問號結束。
輸入的SQL語句和執行結果如下所示。
mysql> SELECT * FROM test_db.tb_students_info -> INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/file.txt' -> FIELDS TERMINATED BY '"' -> LINES TERMINATED BY '?'; Query OK, 10 rows affected (0.06 sec)
數據庫恢復
數據庫恢復是指以備份為基礎,與備份相對應的系統維護和管理操作。
系統進行恢復操作時,先執行一些系統安全性的檢查,包括檢查所要恢復的數據庫是否存在、數據庫是否變化及數據庫文件是否兼容等,然后根據所采用的數據庫備份類型采取相應的恢復措施。
數據庫恢復機制設計的兩個關鍵問題是:第一,如何建立冗余數據;第二,如何利用這些冗余數據實施數據庫恢復。
建立冗余數據最常用的技術是數據轉儲和登錄日志文件。通常在一個數據庫系統中,這兩種方法是一起使用的。
數據轉儲是 DBA 定期地將整個數據庫復制到磁帶或另一個磁盤上保存起來的過程。這些備用的版本成為后備副本或后援副本。
可使用 LOAD DATA…INFILE 語句來恢復先前備份的數據。
【實例】將之前導出的數據備份文件 file.txt 導入數據庫 test_db 的表 tb_students_copy 中,其中 tb_students_copy 的表結構和 tb_students_info 相同。
首先創建表 tb_students_copy,輸入的 SQL 語句和執行結果如下所示。
mysql> CREATE TABLE tb_students_copy -> LIKE tb_students_info; Query OK, 0 rows affected (0.52 sec) mysql> SELECT * FROM tb_students_copy; Empty set (0.00 sec)
導入數據與查詢表 tb_students_copy 的過程如下所示。
mysql> LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 5.7/ Uploads/file.txt' -> INTO TABLE test_db.tb_students_copy -> FIELDS TERMINATED BY ',' -> OPTIONALLY ENCLOSED BY '"' -> LINES TERMINATED BY '?'; Query OK, 10 rows affected (0.14 sec) Records: 10 Deleted: 0 Skipped: 0 Warnings: 0 mysql> SELECT * FROM test_db.tb_students_copy; +----+--------+---------+------+------+--------+------------+ | id | name | dept_id | age | sex | height | login_date | +----+--------+---------+------+------+--------+------------+ | 1 | Dany | 1 | 25 | F | 160 | 2015-09-10 | | 2 | Green | 3 | 23 | F | 158 | 2016-10-22 | | 3 | Henry | 2 | 23 | M | 185 | 2015-05-31 | | 4 | Jane | 1 | 22 | F | 162 | 2016-12-20 | | 5 | Jim | 1 | 24 | M | 175 | 2016-01-15 | | 6 | John | 2 | 21 | M | 172 | 2015-11-11 | | 7 | Lily | 6 | 22 | F | 165 | 2016-02-26 | | 8 | Susan | 4 | 23 | F | 170 | 2015-10-01 | | 9 | Thomas | 3 | 22 | M | 178 | 2016-06-07 | | 10 | Tom | 4 | 23 | M | 165 | 2016-08-05 | +----+--------+---------+------+------+--------+------------+ 10 rows in set (0.00 sec)