MySQL資料庫備份: mysqldump VS xtrabackup
MySQL資料庫備份工具比較
最近使用了公司的一個專案管理工具進行團隊任務管理,本來這個工具使用起來很方便的,但是前幾天突然發現最近一段時間做的更新操作全都消失不見了,找工具的運維人員也恢復不回來,感覺這個工具再使用下去隱隱有些擔憂。從這個事情上深深體會到了資料備份的重要性,我們生產環境上的資料如果沒有做任務安全措施就跟裸奔一樣,毫無安全感,隨便出現一點狀況就可能導致資料丟失。
針對資料庫的資料保護措施通常包括主從複製和資料備份,主從複製比較強大,一方面實現了資料的備份,另外可以通過主從複製實現讀寫分離,緩解資料的負載壓力,但是主從複製搭建起來稍微麻煩一些。資料備份可以使用工具輕鬆實現,結合定時任務也能一定程度上保證我們資料的安全。今天剛好對我們的生產環境資料庫做了自動備份,這裡記錄一下工具的選擇工程。
我們產品使用MySQL作為資料庫,目前用於對MySQL資料庫備份最常用的兩個工具是mysqldump和xtrabackup。兩個工具採用了不同的備份策略,各有自己的優勢和不足,我們在選擇的時候需要結合自己的實際場景進行選擇。
兩者對比如下:
工具名稱 | mysqldump | xtrabackup |
---|---|---|
備份方式 | 邏輯備份 | 物理備份 |
資料儲存方式 | sql指令碼 | 二進位制檔案 |
是否支援熱備份 | 是 | 是 |
是否支援增量備份 | 是 | 是 |
備份過程 | 會鎖表 | 不鎖表 |
是否影響正常業務 | 影響較大 | 影響較小 |
備份和恢復效能 | 耗時較長 | 耗時較短 |
佔用空間 | 佔用空間小 | 佔用空間較大 |
那我們應該如何選擇呢?當我們的資料量比較大時,而且希望備份操作對正常業務影響儘可能小,而且我們有足夠的空間來儲存備份資料時,我們應該選擇使用xtrabackup,基於二進位制檔案進行備份,速度非常快,再結合打包壓縮,也能適度降低儲存空間;當我們的業務資料庫相對較小,而且沒有那麼多空閒空間儲存備份資料時,可以選擇使用mysqldump進行備份,儘量選擇在業務量較低如深夜進行備份操作。另外資料恢復時允許的資料庫停機時間也是一個參考因素,使用mysqldump進行資料恢復的停機時間會相對長很多。比如我們的資料庫備份檔案在幾G大小時,使用xtrabackup進行恢復時估計只需10+秒即可恢復,但是使用mysqldump恢復資料卻可能會花上數分鐘甚至上小時,因為需要重新對資料庫建立索引和儲存結構。
另外值得說的一點就是,我們為資料庫做好自動化備份之後,我們需要經常演練一下恢復過程以確保備份恢復機制處於可工作狀態,以防在業務真正出現問題時才發現備份機制已經不工作很長時間了。