MySQL 備份與還原詳解


相關閱讀:

MySQL備份和恢復具體實施 http://www.linuxidc.com/Linux/2012-12/76257.htm

MySQL備份與恢復的三種方法總結 http://www.linuxidc.com/Linux/2012-12/75428.htm

MySQL備份還原(視圖、存儲過程) http://www.linuxidc.com/Linux/2012-01/52665.htm

 

一、MySQL備份類型

1.熱備份、溫備份、冷備份 (根據服務器狀態)

  • 熱備份:讀、寫不受影響;

  • 溫備份:僅可以執行讀操作;

  • 冷備份:離線備份;讀、寫操作均中止;

 

2.物理備份與邏輯備份 (從對象來分)

  • 物理備份:復制數據文件;

  • 邏輯備份:將數據導出至文本文件中;

 

3.完全備份、增量備份、差異備份 (從數據收集來分)

  • 完全備份:備份全部數據;

  • 增量備份:僅備份上次完全備份或增量備份以后變化的數據;

  • 差異備份:僅備份上次完全備份以來變化的數據;

 

4.邏輯備份的優點:

  • 在備份速度上兩種備份要取決於不同的存儲引擎

  • 物理備份的還原速度非常快。但是物理備份的最小力度只能做到表

  • 邏輯備份保存的結構通常都是純ASCII的,所以我們可以使用文本處理工具來處理

  • 邏輯備份有非常強的兼容性,而物理備份則對版本要求非常高

  • 邏輯備份也對保持數據的安全性有保證

 

5.邏輯備份的缺點:

  • 邏輯備份要對RDBMS產生額外的壓力,而裸備份無壓力

  • 邏輯備份的結果可能要比源文件更大。所以很多人都對備份的內容進行壓縮

  • 邏輯備份可能會丟失浮點數的精度信息

 

說明,差異備份要比增量備份占用的空間大,但恢復時比較方便!但我們一般都用增量備份

 

二、MySQL備份都備份什么?

一般備份以下幾個部分:

1.數據文件

2.日志文件(比如事務日志,二進制日志)

3.存儲過程,存儲函數,觸發器

4.配置文件(十分重要,各個配置文件都要備份)

5.用於實現數據庫備份的腳本,數據庫自身清理的Croutab等……

 

三、MySQL備份工具

常用的備份工具:

1.Mysql自帶的備份工具

  • mysqldump 邏輯備份工具,支持所有引擎,MyISAM引擎是溫備,InnoDB引擎是熱備,備份速度中速,還原速度非常非常慢,但是在實現還原的時候,具有很大的操作余地。具有很好的彈性。

  • mysqlhotcopy 物理備份工具,但只支持MyISAM引擎,基本上屬於冷備的范疇,物理備份,速度比較快。

2.文件系統備份工具

  • cp 冷備份,支持所有引擎,復制命令,只能實現冷備,物理備份。使用歸檔工具,cp命令,對其進行備份的,備份速度快,還原速度幾乎最快,但是靈活度很低,可以跨系統,但是跨平台能力很差。

    lvm 幾乎是熱備份,支持所有引擎,基於快照(LVM,ZFS)的物理備份,速度非常快,幾乎是熱備。只影響數據幾秒鍾而已。但是創建快照的過程本身就影響到了數據庫在線的使用,所以備份速度比較快,恢復速度比較快,沒有什么彈性空間,而且LVM的限制:不能對多個邏輯卷同一時間進行備份,所以數據文件和事務日志等各種文件必須放在同一個LVM上。而ZFS則非常好的可以在多邏輯卷之間備份

3.其它工具

  • ibbackup 商業工具 MyISAM是溫備份,InnoDB是熱備份 ,備份和還原速度都很快,這個軟件它的每服務器授權版本是5000美元。

  • xtrabackup 開源工具 MyISAM是溫備份,InnoDB是熱備份 ,是ibbackup商業工具的替代工具。

 

四、MySQL備份策略

1.策略一:直接拷貝數據庫文件(文件系統備份工具 cp)(適合小型數據庫,是最可靠的)

當你使用直接備份方法時,必須保證表不在被使用。如果服務器在你正在拷貝一個表時改變它,拷貝就失去意義。保證你的拷貝完整性的最好方法是關閉服務器,拷貝文件,然后重啟服務器。如果你不想關閉服務器,要在執行表檢查的同時鎖定服務器。如果服務器在運行,相同的制約也適用於拷貝文件,而且你應該使用相同的鎖定協議讓服務器“安靜下來”。當你完成了備份時,需要重啟服務器(如果關閉了它)或釋放加在表上的鎖定(如果你讓服務器運行)。要用直接拷貝文件把一個數據庫從一台機器拷貝到另一台機器上,只是將文件拷貝到另一台服務器主機的適當數據目錄下即可。要確保文件是MyIASM格式或兩台機器有相同的硬件結構,否則你的數據庫在另一台主機上有奇怪的內容。你也應該保證在另一台機器上的服務器在你正在安裝數據庫表時不訪問它們。

2.策略二:mysqldump備份數據庫(完全備份+增加備份,速度相對較慢,適合中小型數據庫)(MyISAM是溫備份,InnoDB是熱備份)

mysqldump 是采用SQL級別的備份機制,它將數據表導成 SQL 腳本文件,在不同的 MySQL 版本之間升級時相對比較合適,這也是最常用的備份方法。mysqldump 比直接拷貝要慢些。對於中等級別業務量的系統來說,備份策略可以這么定:第一次完全備份,每天一次增量備份,每周再做一次完全備份,如此一直重復。而對於重要的且繁忙的系統來說,則可能需要每天一次全量備份,每小時一次增量備份,甚至更頻繁。為了不影響線上業務,實現在線備份,並且能增量備份,最好的辦法就是采用主從復制機制(replication),在 slave 機器上做備份。

3.策略三:lvs快照從物理角度實現幾乎熱備的完全備份,配合二進制日志備份實現增量備份,速度快適合比較煩忙的數據庫

前提:

  • 數據文件要在邏輯卷上;

  • 此邏輯卷所在卷組必須有足夠空間使用快照卷;

  • 數據文件和事務日志要在同一個邏輯卷上;

步驟:

(1).打開會話,施加讀鎖,鎖定所有表;

 

1
2
mysql> FLUSH TABLES WITH READ LOCK;
mysql> FLUSH LOGS;

(2).通過另一個終端,保存二進制日志文件及相關位置信息;

1
mysql -uroot -p -e  'SHOW MASTER STATUS\G'  /path/to/master .info

(3).創建快照卷

1
lvcreate -L  # -s -p r -n LV_NAME /path/to/source_lv

(4).釋放鎖

1
mysql> UNLOCK TABLES;

(5).掛載快照卷,備份

1
2
mount
cp

(6).刪除快照卷;

 

或者用現成的集成命令工具mylvmbackup(可以集成上面的命令集合,自動完成備份)

mylvmbackup --user=dba --password=xxx  --mycnf=/etc/my.cnf   --vgname=testvg  --lvname=testlv --backuptype=tar --lvsize=100M --backupdir=/var/lib/backup

 

4.策略四:xtrabackup 備份數據庫,實現完全熱備份與增量熱備份(MyISAM是溫備份,InnoDB是熱備份),由於有的數據在設計之初,數據目錄沒有存放在LVM上,所以不能用LVM作備份,則用xtrabackup代替來備份數據庫

說明:Xtrabackup是一個對InnoDB做數據備份的工具,支持在線熱備份(備份時不影響數據讀寫),是商業備份工具InnoDB Hotbackup或ibbackup的一個很好的替代品。

Xtrabackup有兩個主要的工具:xtrabackup、innobackupex

  • xtrabackup 只能備份InnoDB和XtraDB兩種數據表,而不能備份MyISAM數據表。

  • innobackupex 是參考了InnoDB Hotbackup的innoback腳本修改而來的.innobackupex是一個perl腳本封裝,封裝了xtrabackup。主要是為了方便的同時備份InnoDB和MyISAM引擎的表,但在處理myisam時需要加一個讀鎖。並且加入了一些使用的選項。如slave-info可以記錄備份恢復后作為slave需要的一些信息,根據這些信息,可以很方便的利用備份來重做slave。

特點:

  • 備份過程快速、可靠;

  • 備份過程不會打斷正在執行的事務;

  • 能夠基於壓縮等功能節約磁盤空間和流量;

  • 自動實現備份檢驗;

  • 還原速度快;

5.策略五:主從復制(replication)實現數據庫實時備份(集群中常用)

6.總結

單機備份是完全備份(所有數據庫文件)+增量備份(備份二進制日志)相結合!

集群中備份是完全備份(所有數據庫文件)+增量備份(備份二進制日志)+主從復制(replication)相結合的方法!

 

 

數據會完整備份到/root/mybackup/xtrabackup/中目錄名字為當前的日期,xtrabackup會備份所有的InnoDB表,MyISAM表只是復制表結構文件、以及MyISAM、MERGE、CSV和ARCHIVE表的相關文件,同時還會備份觸發器和數據庫配置信息相關的文件。除了保存數據外還生成了一些xtrabackup需要的數據文件,詳解如下:

  • xtrabackup_checkpoints 備份類型(如完全或增量)、備份狀態(如是否已經為prepared狀態)和LSN(日志序列號)范圍信息;每個InnoDB頁(通常為16k大小)都會包含一個日志序列號,即LSN。LSN是整個數據庫系統的系統版本號,每個頁面相關的LSN能夠表明此頁面最近是如何發生改變的。

  • xtrabackup_binlog_info mysql服務器當前正在使用的二進制日志文件及至備份這一刻為止二進制日志事件的位置。

  • xtrabackup_binary 備份中用到的xtrabackup的可執行文件。

  • backup-my.cnf 備份命令用到的配置選項信息。

  • xtrabackup_logfile 記錄標准輸出信息xtrabackup_logfile

 

17.總結

如果在增量備份后數據庫出現故障,我們需要通過完整備份+到現在為止的所有增量備份+最后一次增量備份到現在的二進制日志來恢復

18.附注

單獨備份:

1
innobackupex --user=root --password=123456 --defaults- file = /etc/my .cnf --database= test /root/mybackup

備份並打包壓縮:

1
innobackupex --user=root --password=123456 --defaults- file = /etc/my .cnf --database= test --stream= tar  /root/mybackup/  gzip  /root/mybackup/testdb . tar .gz

帶時間戳:

1
innobackupex --user=root --password=123456 --defaults- file = /etc/my .cnf --database= test --stream= tar  /root/mybackup/  gzip  /root/mybackup/ ` date  +%F`_testdb. tar .gz

備份信息輸出重定向到文件:

1
innobackupex --user=root --password=123456 --defaults- file = /etc/my .cnf --database= test --stream= tar  /root/mybackup/  2> /root/mybackup/test .log |  gzip  1> /root/mybackup/test . tar .gz

說明:

1
2
3
4
5
6
7
--stream  #指定流的格式,目前只支持tar
--database= test  #單獨對test數據庫做備份 ,若是不添加此參數那就那就是對全庫做
2> /root/mybackup/test .log  #輸出信息寫入日志中
1> /root/mybackup/test . tar .gz  #打包壓縮存儲到該文件中
解壓  tar  -izxvf 要加-i參數,官方解釋 innobackupex: You must use -i (--ignore-zeros) option  for  extraction of the  tar  stream.
在備份完成后,數據尚且不能用於恢復操作,因為備份的數據中可能會包含尚未提交的事務或已經提交但尚未同步至數據文件中的事務。
此時數據文件仍處理不一致狀態。“准備”的主要作用正是通過回滾未提交的事務及同步已經提交的事務至數據文件也使得數據文件處於一致性狀態。

5.策略五:主從復制(replication)實現數據庫實時備份(集群中常用)

 

 

轉自:http://www.linuxidc.com/Linux/2013-07/87990.htm

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM