A. 什麼是資料庫備份
對於MySQL資料庫,備份與恢復相關的術語包括:備份(backup)、還原(restore)、恢復(recover)、二進制日誌(binlog),其中備份按照其特性可以分為:物理備份和邏輯備份;冷備、溫備和熱備;完全備份和不完全備份等;常用的備份工具包括:操作系統拷貝、mysqlmp等;還原包括物理備份的還原和邏輯備份的還原;下面分別加以介紹和說明。
資料庫備份通俗地說是將資料庫的某一時刻的數據復制了一份;資料庫還原是將備份出的數據替換掉原來資料庫中的數據文件,將備份放回到原來資料庫文件的目錄位置;二進制日誌(BINLOG)記錄資料庫的變更過程,例如創建資料庫、建表、修改表等DDL操作、以及數據表的相關DML操作,這些操作會導致資料庫產生變化,開啟binlog以後導致資料庫產生變化的操作會按照時間順序以「事件」的形式記錄到binlog二進制文件中。
參考上圖,在凌晨2:00,管理員將已開啟二進制日誌的資料庫的數據做了一個完整的備份,隨著時間的推移,仍然有用戶對資料庫進行相關的寫操作(包括:DDL語句、DML語句中的增刪改操作、DCL授權語句和TCL事務處理語句等),導致了二進制日誌文件寫滿(默認1G)後自動切換;在上午9:37時,由於硬碟出現故障,資料庫用戶不能正常訪問存放在硬碟中的資料庫數據,此時如果資料庫備份和二進制日誌沒有損壞,管理員是可以通過還原備份和恢復二進制日誌的方式挽回數據損失的。
挽回數據損失的過程包括:1.更換新硬碟;2.還原備份;3.重做備份到故障時段的二進制日誌中的語句等;正常情況不會造成數據的丟失,損失的僅僅是一段時間的停機時間。
上例中,還原數據備份時,資料庫中的數據回到了備份時刻的狀態,而二進制日誌中記錄了從備份到故障前一段時間內所有用戶對資料庫的寫操作的語句,只要把這些語句按照時間順序重新運行一遍,所還原的數據就會變成為故障前那一刻的狀態,不會造成數據丟失。因此通常把保存在二進制日誌中的語句重新執行的過程叫做恢復。
B. 資料庫的備份與恢復
SQL2000資料庫的備份概念
SQL
SERVER
2000有四種類型是:資料庫、事務日誌、差異、文件和文件組
資料庫備份是創建完事資料庫的復本。它並非將所有的頁都復制到備份集,而只將實際包含數據的頁復制到備份集。數據頁和事務日誌頁均復制到備份集。
資料庫備份用於重新創建資料庫,使其恢復到BACKUP語句完成時的狀態。如果資料庫只存在資料庫備份,那麼資料庫只能恢復到伺服器或資料庫發生故障前最後一次資料庫備份時的狀態。
事務日誌備份僅製作日誌文件的復本。日誌文件備份本身不能用於還原資料庫。日誌文件用於在資料庫還原後將資料庫恢復到原始故障點。
例如,某站點在星期天晚上執行資料庫備份,而在其它每個晚上執行日誌備份。如果資料庫的某個數據磁碟在星期二2:30丟失,則該站點可以:
1備份當前事務日誌
2還原從星期天晚上開始的資料庫備份
3還原從星期一晚上開始的日誌備份,以將資料庫前滾。
4還原故障之後的日誌備份。這將使資料庫前滾到故障發生的那一刻。
事務日誌恢復需要從資料庫備份的那一刻到磁碟丟失那一刻之間所進行的一邊串不間斷的事務日誌備份。
差異備份只追尋資料庫中自上一次資料庫備份之後修改過的所有頁的復本。差異日誌主要用於使用頻繁的系統,一旦這類系統中的資料庫發生故障,必須盡快使其重新聯機。差異備份比完事資料庫備份小,因此對正在運行的系統影響較小。
例如,某個站點在星期天晚上執行完事資料庫備份。在白天每隔4小時製作一個事務日誌備份集,並用當天的備份重寫頭一天的備份。每晚則進行差異備份。如果資料庫的某個數據磁碟在星期四上午9:12出現故障,則該站點可以:
1備份當前事務日誌。
2還原從星期天晚上開始的資料庫備份。
3還原從星期三晚上開始的差異備份,將資料庫前滾到這一時刻。
4還原從早上4點到8點的事務日誌備份,以將資料庫前滾到早上8點。
5還原故障之後的日誌備份,這將使資料庫前滾到故障發生的那一刻。
SQL2000支持備份或還原資料庫中的個別文件或文件組。這是一種相對較完善的備份和還原過程,通常用在具有較高可用性要求的超大型資料庫中。如果可用的備份時間不足以支持完事資料庫備份,則可以在不同的時間備份資料庫的子集。
例如,某站點需要花三小時備份資料庫,並且每天只能用兩個小時執行備份。該站點可在一個晚上備份一半文件或文件級,並在第二個晚上備份另一半。如果包含資料庫文件或文件組的磁碟出現故障,那麼該站點可以只還原丟失的文件或文件組。
該站點還必須進行事務日誌備份,並且在備份文件或文件組之後必須還原所胡事務日誌備份。還可以從完事資料庫備份集中還原文件和文件組。這將回憶恢復速度,因為在第一步只還原已損壞的文件或文件組,而不是整個資料庫。