數據庫 之 數據備份和恢復概念
備份:存儲的數據副本;
原始數據:持續改變;
恢復:把副本應用到線上系統;
僅能恢復至備份操作時刻的數據狀態;
時間點恢復:通過binary logs實現基於時間點的恢復;
為什麽備份?
災難恢復:硬件故障(冗余,僅解決硬件不可用時,服務正常提供)、軟件故障(bug)、自然災害、黑客攻擊、誤操作(人為錯誤操作導致,出現幾率最大)、...
測試;將生產的數據拷貝到測試環境中做測試,達到和生產環境一樣的效果
備份會造成對系統的I/O壓力,決定如何備份要權衡
備份時應該註意事項:
能容忍最多丟失多少數據;
恢復數據需要在多長時間內完成;
需要恢復哪些數據;決定了要備份哪些數據
做恢復演練:
測試備份的可用性;
增強恢復操作效率;
根據備份類型分類:
備份的數據集的範圍:
完全備份和部分備份
完全備份:整個數據集;
部分備份:數據集的一部分,比如部分表;
全量備份、增量備份、差異備份:
完全備份:備份所有的數據
增量備份:僅備份自上一次完全備份或 增量備份以來變量的那部數據;
差異備份:僅備份自上一次完全備份以來變量的那部數據;差異是增量的另一表現形式。這樣會導致占用更多的空間,但是好處是,恢復時間會比增量備份恢復來得快
可以根據需求來實現用哪種備份形式
如數據庫異常時,先用全部恢復,再用增量恢復,最後再用二進制文件來重復對應時間段的恢復,完成完整的恢復。
物理備份、邏輯備份:
物理備份:復制數據文件進行的備份;不需要啟動mysql服務,直接復制相關文件,效率更高。
邏輯備份:從數據庫導出數據另存在一個或多個文件中;數據量較小的時候很常用。通過mysql語句進行備份
數據量大的時候,建議使用物理備份。
根據數據服務是否在線:
熱備:讀寫操作均可進行的狀態下所做的備份;最可行的方案。可能會導致數據的時間戳不一致,如備份過程,有些數據同時被更改了,導致數據時間戳不一樣。所以熱備技術復雜度很高,但是這個是必須要使用的。所以需要有技術來實現。myISAM不支持熱備,innodb引擎支持熱備。
註意,innodb可以做熱備的原因有兩個
1.lsn:日誌序列號,每次日誌增加時,這個數值就會被加1,會一直累加。做全量備份,就會使得lsn一直增加到最大值。
innodb使用表空間來存儲數據,表空間內部有黑盒,可以理解為把表空間分成多個數據塊,每一刻都是獨立而自制的單位,會通過日誌序列號(lsn)來記錄,如果數據塊的數據被修改,那麽lsn就會增加,如第一塊數據塊被修改了,則加1,如lsn 為1,此時第二塊數據塊被修改,再加1,,此時lsn為2,之後lsn依次累加。備份是可以根據lsn的序列號進行恢復。
2.關鍵因素,innodb支持mvcc機制,為每個事務啟用快照。因此讀取到的數據都是啟用事務那個時刻的數據。相當於是內部快照功能,通過快照可以訪問到時間點同一的數據,所以innodb可以支持熱備。
溫備:可讀但不可寫狀態下進行的備份;基本不可行,因為不能寫入,很多功能不能實現
冷備:讀寫操作均不可進行的狀態下所做的備份;最安全,但是基本不用。如果有數據庫主從復制時,可以停掉主的,使用從的,這樣就可以實現冷備。
備份需要考慮因素:
鎖定資源多長時間?
備份過程的時長?
備份時的服務器負載?
恢復過程的時長?
備份策略:
全量+差異 + binlogs
全量+增量 + binlogs
備份手段:物理、邏輯
建議采用物理熱備,因為物理備份性能好,效率高,熱備不中斷業務。
實現方法:
mysqldump+binlog
lvm2+cp/tar+binlog
xtrabackup(innodb)+binlog
備份什麽?
數據
二進制日誌、InnoDB的事務日誌;
代碼(存儲過程、存儲函數、觸發器、事件調度器)
服務器的配置文件
備份工具:
mysqldump:mysql服務自帶的備份工具;邏輯備份工具;
支持完全備份和部分備份;
InnoDB引擎中mysqldump支持熱備;
MyISAM引擎中mysqldump支持溫備;
cp/tar:復制後歸檔
借助lvm2的快照(請求一個全局鎖)功能進行備份,之後立即釋放鎖,達到幾乎熱備的效果(快照執行速度快,執行的時候不能被訪問,所以叫幾乎熱備,中斷時間短,但是lvm出現故障後數據恢復困難,但是lvm擴展起來方便);屬於物理備份;
註意:不能僅備份數據文件;要同時備份事務日誌;前提:要求數據文件和事務日誌位於同一個邏輯卷;
xtrabackup:實現innobackup(innobackup是收費的,但是這個工具很好用)的功能的另一個工具,由Percona提供,開源工具,支持對InnoDB做熱備,物理備份工具;
完全備份、部分備份;
完全備份、增量備份;
完全備份、差異備份;
mysqlhotcopy:實現幾乎冷備,mysql自帶
select:一般用於一張表中的一些行,用這個工具,其他情況不用
備份:SELECT cluase INTO OUTFILE 'FILENAME';
恢復:CREATE TABLE
導入:LOAD DATA
備份建議使用mysqldump 或者 xtrabackup這兩個工具來實現。針對這這兩個工具如何實現備份將通過例子進行介紹
xtrabackup:支持物理備份
全量+差異+binlog ,如每個月做全量,每天做差異,再用binlog做時間點備份
全量+增量+binlog
mysqldump:只支持全量,數量量小,如幾十G的數據,可以用這個工具
全量+binlog
數據庫 之 數據備份和恢復概念