為MySQL選擇合適的備份方式
數(shù)據(jù)庫的備份是極其重要的事情。如果沒有備份,遇到下列情況就會抓狂:
UPDATE or DELETE whitout where…
table was DROPPed accidentally…
INNODB was corrupt…
entire datacenter loses power…
從數(shù)據(jù)安全的角度來說,服務(wù)器磁盤都會做raid,MySQL本身也有主從、drbd等容災(zāi)機制,但它們都無法完全取代備份。容災(zāi)和高可用能幫我們有效的應(yīng)對物理的、硬件的、機械的故障,而對我們犯下的邏輯錯誤卻無能為力。每一種邏輯錯誤發(fā)生的概率都極低,但是當(dāng)多種可能性疊加的時候,小概率事件就放大成很大的安全隱患,這時候備份的必要性就凸顯了。那么在眾多的MySQL備份方式中,哪一種才是適合我們的呢?
常見的備份方式
MySQL本身為我們提供了mysqldump、mysqlbinlog遠(yuǎn)程備份工具,percona也為我們提供了強大的Xtrabackup,加上開源的mydumper,還有基于主從同步的延遲備份、從庫冷備等方式,以及基于文件系統(tǒng)快照的備份,其實選擇已經(jīng)多到眼花繚亂。而備份本身是為了恢復(fù),所以能夠讓我們在出現(xiàn)故障后迅速、準(zhǔn)確恢復(fù)的備份方式,就是最適合我們的,當(dāng)然,同時能夠省錢、省事,那就非常完美。下面就我理解的幾種備份工具進行一些比較,探討下它們各自的適用場景。
1. mysqldump & mydumper
mysqldump是最簡單的邏輯備份方式。在備份myisam表的時候,如果要得到一致的數(shù)據(jù),就需要鎖表,簡單而粗暴。而在備份innodb表的時候,加上–master-data=1 –single-transaction 選項,在事務(wù)開始時刻,記錄下binlog pos點,然后利用mvcc來獲取一致的數(shù)據(jù),由于是一個長事務(wù),在寫入和更新量很大的數(shù)據(jù)庫上,將產(chǎn)生非常多的undo,顯著影響性能,所以要慎用。
優(yōu)點:簡單,可針對單表備份,在全量導(dǎo)出表結(jié)構(gòu)的時候尤其有用。
缺點:簡單粗暴,單線程,備份慢而且恢復(fù)慢,跨IDC有可能遇到時區(qū)問題。
mydumper是mysqldump的加強版。相比mysqldump:
內(nèi)置支持壓縮,可以節(jié)省2-4倍的存儲空間。
支持并行備份和恢復(fù),因此速度比mysqldump快很多,但是由于是邏輯備份,仍不是很快。
2. 基于文件系統(tǒng)的快照
基于文件系統(tǒng)的快照,是物理備份的一種。在備份前需要進行一些復(fù)雜的設(shè)置,在備份開始時刻獲得快照并記錄下binlog pos點,然后采用類似copy-on-write的方式,把快照進行轉(zhuǎn)儲。轉(zhuǎn)儲快照本身會消耗一定的IO資源,而且在寫入壓力較大的實例上,保存被更改數(shù)據(jù)塊的前印象也會消耗IO,最終表現(xiàn)為整體性能的下降。而且服務(wù)器還要為copy-on-write快照預(yù)留較多的磁盤空間,這本身對資源也是一種浪費。因此這種備份方式我們使用的不多。
posted on 2014-10-30 11:58 順其自然EVO 閱讀(374) 評論(0) 編輯 收藏 所屬分類: 測試學(xué)習(xí)專欄 、數(shù)據(jù)庫