各位好
小弟想請教關於在Linux上的Mysql的備份方式
一直以來都是用tar把Mysql整個目錄壓縮備份起來,連權限也保留了
而有過硬碟損壞,重灌Centos後直接刪除原Mysql目錄
然後把備份壓縮檔解壓縮,cnf設定檔設定好後,啟動後ok正常
但有個疑惑,雖然這備份方式也有可能因為Mysql版本不同而有問題
但是也不乏是個不錯的方法,至少我復原過幾次都沒出過問題
但是唯一不方便的地方是必須要停止Mysql然後開始壓縮備份
一開始開站資料量非常小,沒什麼感覺
但是隨著網站成長,資料量越來越大,整個Mysql目錄壓縮起來已經有十幾G的大小了
停止Mysql開始備份到結束後啟動Mysql,已經要快到達兩個小時之久了
可否請各位前輩提供好的備份方法,或是對於此壓縮備份有改善時間長的方法
非常感謝
因為只有一台主機,沒辦法做異地備份,也沒法做master、slave
第一種方法: 停掉MySQL用tar+gzip, 開發系統時還可用用, 但是線上系統則不建議.
第二種方法: 用一般的rsync+mysqldump+cron應該可以達到備份的功能, 備份的高時間差依然有資料損失的風險, 同時對於備份管理不易, 災難復原後對資料的信任程度降低. 這不是只有rsync這樣單純, 更何況您對rsync這個基礎的指令尚不熟悉, 更會增加您管理的風險.
第三種方法: 有一個專案可以試試: http://sourceforge.net/projects/automysqlbackup/, 遞增備份, 壓縮並加密備份檔, 遠端備份, 備份完Email通知..等等, 看起來不錯, 找機會用用, mail的部份用的是mutt, 我想會內建一個msmtp, 再改直接用此內建的msmtp來送email, 如果改好後再回饋回去, 我剛好有系統可以用.
第四種方法: 也是建議的方法之一, 就是Replication, Master/Slave的Replication方式遠比rsync, tar, mysqldump,...好. 如果MySQL的資料對您很重要, 就必需要用另一台主機, 主機的規格看您的服務水平, 如果只求資料不失去, 可以用低規的.
第五種方法: 用drbd, 將資料庫所在的磁區實時同步, 這個方法加上heartbeat更可做到High Availibility, 這是我最喜歡的方法, 可以和第四種方法合併使用.
第六種方法: 用MariaDB或Percona, 使用XtraBackup. 我的MySQL資料庫都用Percona和MariaDB, MariaDB才剛推出整合官方"企業版功能"的MySQL, 而非官方的限制社區版的MySQL.
第七種方法: 雖然Oracle的Larry Ellison忙著上法庭和Google的Larry Page打官司, 上演Larry vs Larry大戲, 但是Ellison並沒有忘記MySQL, MySQL有付費的企業版, 有強大的備份功能.
其他方法: 請各位先進補充.
mysql 在大部份情況下,是不必停止服務就可以做備份的。
如果 table 是用 MyISAM engine,只要 flush 再 read lock,就可以直接 copy,跟你停機再 tar,是一樣的效果。假如你不知道如何 flush & lock,mysql 已經提供一支程式給你用:mysqlhotcopy
http://dev.mysql.com/doc/refman/5.5/en/mysqlhotcopy.html
用它幫你 copy 整個資料庫就行了。不過因為會 lock table,所以還是得選擇在離峰時段做,以免 user 會覺得系統卡卡的。
另外就是若有使用 InnoDB engine,mysqlhotcopy 並不會 copy 這種 table,必須搭配 mysqldump 把這類型 table 的資料匯出成 SQL 檔。
基本上會建議你至少另裝一顆硬碟來備份,而不是備在同一顆硬碟上。mysql 在存取已經夠操了,還加備份讀寫會更操。而且同一顆硬碟壞掉也難保備份還能用。另外,假如硬碟夠用,就不必做 tar 的動作了,因為萬一 tar 檔損壞,解不回來也是一大麻煩。
其它官方站所建議的備份方法,請參考:
http://dev.mysql.com/doc/refman/5.5/en/backup-methods.html
您好
小弟的主機是兩顆硬碟做Raid1
備份是備份到另一顆硬碟,所以總共是三顆硬碟
那如果是tar備份的話,有辦法讓時間少一些嗎?
您說的不必tar備份,意思是cp整個資料夾嗎?
謝謝您
要讓 tar 備份快一點,沒別的方法,就是用快一點的 CPU。
是的。不必tar備份,意思就是cp整個資料夾,只不過是用 mysqlhotcopy 來做 cp 的功能。
rsync好像可以增量備份,那如果只有一台主機,可以用rsync嗎?
可以。
不好意思有些看不太懂
意思是用rsync要先複製好幾份嗎?
不能直接下一個指令直接增量備份??
黑字就是指令啊!而且也才兩個指令而已唷
X 代表你要備份的目錄,X1 是第一次備份,X2 是第二次備份,以此類推
rsync 用了好多年,是個好用的功能。
a 備份到 a1 資料夾,沒有什麼增不增量的問題,純粹使用覆蓋舊檔的方式進行即可。
a 目錄若有 10 個檔案,a1 有9個檔案,在 rsync 同步之後
a1 會變成10個和 a 目錄裏完全一樣的檔案。
rsync 會比對來源和目的的檔案是否相同,若不同,就會覆蓋目的檔案。
例如來源的 test.txt 的內容有修改,目的地的 test.txt 就會被覆蓋。
bizpro提到:
第四種方法: 也是建議的方法之一, 就是Replication, Master/Slave的Replication方式遠比rsync, tar, mysqldump,...好. 如果MySQL的資料對您很重要, 就必需要用另一台主機, 主機的規格看您的服務水平, 如果只求資料不失...(恕刪)
這個比較好, 主要的 master server 會繼續提供服務, slave 在備份的時間可以把 service 停掉之後 tar 整個目錄, 或者用 mysqldump 都可以, 作 mysqlbinlog 也會 lock table
MyMirror可以做 MySQL 的即時複製,使用的資源很少,一般可以做為即時的備份,高階的應用可以做為 HA 架構,有免費版的,參考這篇:
[http://twinpeak.blogspot.com/2010/03/mymirror-mymirror-for-mysql.html
](http://twinpeak.blogspot.com/2010/03/mymirror-mymirror-for-mysql.html<br />
)