為什麼需要備份數據?
在生產環境中我們數據庫可能會遭遇各種各樣的不測從而導致數據丟失, 大概分為以下幾種.
- 硬件故障
- 軟件故障
- 自然災害
- 黑客攻擊
- 誤操作 (佔比最大)
所以, 為了在數據丟失之後能夠恢復數據, 我們就需要定期的備份數據, 備份數據的策略要根據不同的應用場景進行定製, 大致有幾個參考數值, 我們可以根據這些數值從而定製符合特定環境中的數據備份策略
- 能夠容忍丟失多少數據
- 恢復數據需要多長時間
- 需要恢復哪一些數據
數據的備份類型
數據的備份類型根據其自身的特性主要分為以下幾組
- 完全備份
- 部分備份
- 完全備份指的是備份整個數據集( 即整個數據庫 )、部分備份指的是備份部分數據集(例如: 只備份一個表)
而部分備份又分為以下兩種
- 增量備份
- 差異備份
- 增量備份指的是備份自上一次備份以來(增量或完全)以來變化的數據; 特點: 節約空間、還原麻煩
- 差異備份指的是備份自上一次完全備份以來變化的數據 特點: 浪費空間、還原比增量備份簡單
示意圖
![學會4種備份MySQL數據庫(基本備份方面沒問題了)](http://p2.ttnews.xyz/loading.gif)
MySQL備份數據的方式
在MySQl中我們備份數據一般有幾種方式
- 熱備份
- 溫備份
- 冷備份
- 熱備份指的是當數據庫進行備份時, 數據庫的讀寫操作均不是受影響
- 溫備份指的是當數據庫進行備份時, 數據庫的讀操作可以執行, 但是不能執行寫操作
- 冷備份指的是當數據庫進行備份時, 數據庫不能進行讀寫操作, 即數據庫要下線
MySQL中進行不同方式的備份還要考慮存儲引擎是否支持
- MyISAM
- 熱備 ×
- 溫備 √
- 冷備 √
- InnoDB
- 熱備 √
- 溫備 √
- 冷備 √
- 我們在考慮完數據在備份時, 數據庫的運行狀態之後還需要考慮對於MySQL數據庫中數據的備份方式
- 物理備份一般就是通過tar,cp等命令直接打包複製數據庫的數據文件達到備份的效果
- 邏輯備份一般就是通過特定工具從數據庫中導出數據並另存備份(邏輯備份會丟失數據精度)
- 物理備份
- 邏輯備份
備份需要考慮的問題
定製備份策略前, 我們還需要考慮一些問題
我們要備份什麼?
一般情況下, 我們需要備份的數據分為以下幾種
- 數據
- 二進制日誌, InnoDB事務日誌
- 代碼(存儲過程、存儲函數、觸發器、事件調度器)
- 服務器配置文件
備份工具
這裡我們列舉出常用的幾種備份工具
mysqldump : 邏輯備份工具, 適用於所有的存儲引擎, 支持溫備、完全備份、部分備份、對於InnoDB存儲引擎支持熱備
cp, tar 等歸檔複製工具: 物理備份工具, 適用於所有的存儲引擎, 冷備、完全備份、部分備份
lvm2 snapshot: 幾乎熱備, 藉助文件系統管理工具進行備份
mysqlhotcopy: 名不副實的的一個工具, 幾乎冷備, 僅支持MyISAM存儲引擎
xtrabackup: 一款非常強大的InnoDB/XtraDB熱備工具, 支持完全備份、增量備份, 由percona提供
設計合適的備份策略
針對不同的場景下, 我們應該制定不同的備份策略對數據庫進行備份, 一般情況下, 備份策略一般為以下三種
- 直接cp,tar複製數據庫文件
- mysqldump+複製BIN LOGS
- lvm2快照+複製BIN LOGS
- xtrabackup
以上的幾種解決方案分別針對於不同的場景
- 如果數據量較小, 可以使用第一種方式, 直接複製數據庫文件
- 如果數據量還行, 可以使用第二種方式, 先使用mysqldump對數據庫進行完全備份, 然後定期備份BINARY LOG達到增量備份的效果
- 如果數據量一般, 而又不過分影響業務運行, 可以使用第三種方式, 使用lvm2的快照對數據文件進行備份, 而後定期備份BINARY LOG達到增量備份的效果
- 如果數據量很大, 而又不過分影響業務運行, 可以使用第四種方式, 使用xtrabackup進行完全備份後, 定期使用xtrabackup進行增量備份或差異備份
篇幅有限,關於備份的內容簡單介紹到這,生產中實際上用mysqldump和xtrabackup會多一點,後面會主要介紹怎麼去用這兩塊,感興趣的朋友可以關注下!!
![學會4種備份MySQL數據庫(基本備份方面沒問題了)](http://p2.ttnews.xyz/loading.gif)
閱讀更多 波波說運維 的文章