目前幾種流行的MySQL自動備份方式:
一、邏輯備份:使用mysql內建的mysqldump工具進行備份。備份成sql檔案形式。
優點:最大好處是能夠與正在啟動並執行mysql自動協同工作,
在運行期間可以確保備份是當時的點,它會自動將對應操作的表鎖定,不允許其他使用者修改(只能訪問)。可能會阻止修改操作。sql檔案通用方便移植。
缺點:備份的速度比較慢。如果是資料量很多的時候。就很耗時間。如果資料庫伺服器處在提供給使用者服務狀態,在這段長時間操作過程中,意味著要鎖定表(一般是讀鎖定,只能讀不能寫入資料)。那麼服務就會影響的。
備忘:所謂的與mysql伺服器能夠自動協同工作,實際上是指加參數來控制mysql伺服器,比如鎖定所有表只能進行讀,不能進行寫操作。
- --lock-all-tables
二、物理備份:直接拷貝mysql的資料目錄。缺點,你不能去操作正在啟動並執行mysql伺服器(在拷貝的過程中有使用者通過應用程式訪問更新資料,這樣就無法備份當時的資料)可能無法移植到其他機器上去。
直接拷貝只適用於myisam類型的表。這種類型的表是與機器獨立的。但實際情況是,你設計資料庫的時候不可能全部使用myisam類型表。你也不可能:因為myisam類型表與機器獨立,方便移植,於是就選擇這種表,這並不是選擇它的理由。
更多的情況是,你會根據業務特點(比如你需要支援事務機制就必須使用innodb),查詢速度和服務效能來選擇表類型的。
必須保證表不被使用中。
如果伺服器在你則正在拷貝一個表時改變它,拷貝就失去意義。
如果資料庫表在檔案系統備份過程中被修改,進入備份的表檔案主語不一致的狀態,而對以後的恢複表將失去意義。
保證你的拷貝完整性的最好方法是:關閉伺服器,拷貝檔案,然後重啟伺服器。
或者是,要鎖定對應的表(對前端使用者造成訪問問題)。
解釋直接拷貝檔案,為什麼不具備可移植性?
Mysqldump 產生可移植到其他機器、甚至具有不同硬體結構的機器上的文字檔。直接拷貝檔案不能夠移植到其他機器上,除非要拷貝的表使用MyISAM 儲存格式。ISAM 表只能在具有相同硬體結構的機器之間進行拷貝。例如,將檔案從S PARC 的Solaris 機器拷貝到Intel 的Solaris 機器(或者相反)是行不通的。由MySQL3.23 引進的MyISAM 表格儲存體格式可以解決這個問題,因為該格式與機器獨立。因此,如果以下兩個條件都滿足的話,直接拷貝檔案可以移植到具有不同硬體結構的機器上:即另一台機器上也必須運行MySQL3.23 以上的版本,並且檔案必須表示成MyISAM 表,而不是ISAM 表。
三、雙機熱備份:mysql資料庫沒有增量備份的機制。當資料量太大的時候備份是一個很大的問題。還好mysql資料庫提供了一種主從備份的機制(也就是雙機熱備)。
優點:適合資料量大的時候。現在明白了。大的互連網公司對於mysql資料備份,都是採用熱機備份。搭建多台資料庫伺服器,進行主從複製。
主從複製經常遇到的問題就是,如何保證資料不堵塞,不延遲。這個問題還是可以容忍的,有一些方案可以改善。畢竟有得有失的。這已經是很省心省力的方式了。
================================================
我目前應該使用什麼樣的備份策略的權衡:
物理備份,恢複快,當然最好是儲存在一個機器上。我現在是用物理備份還是邏輯備份為好呢?
考慮到以後會遷移平台。為了保證通用性。恢複速度1分鐘左右的差距我是可以容忍的。所以我為了跨平台,我更加願意使用邏輯備份。儲存sql檔案形式。
雙熱機備份方式,目前硬體沒有多個。技術人員有限,需要人力去維護,比較麻煩。所以排除在外。
Linux下通過mysqldump備份MySQL資料庫成sql檔案
Linux中使用mysqldump對MySQL資料庫進行定時備份
使用MySQLDumper備份與恢複資料
MySQL開源備份工具Xtrabackup備份部署
MySQL Xtrabackup備份和恢複