MySQL 備份與還原詳解

相關閱讀:mysql

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

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

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

 

1、MySQL備份類型安全

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

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

  • 溫備份:僅能夠執行讀操做;函數

  • 冷備份:離線備份;讀、寫操做均停止;工具

 

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

  • 物理備份:複製數據文件;

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

 

3.徹底備份、增量備份、差別備份 (從數據收集來分)

  • 徹底備份:備份所有數據;

  • 增量備份:僅備份上次徹底備份或增量備份之後變化的數據;

  • 差別備份:僅備份上次徹底備份以來變化的數據;

 

4.邏輯備份的優勢:

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

  • 物理備份的還原速度很是快。可是物理備份的最小力度只能作到表

  • 邏輯備份保存的結構一般都是純ASCII的,因此咱們可使用文本處理工具來處理

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

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

 

5.邏輯備份的缺點:

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

  • 邏輯備份的結果可能要比源文件更大。因此不少人都對備份的內容進行壓縮

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

 

說明,差別備份要比增量備份佔用的空間大,但恢復時比較方便!但咱們通常都用增量備份

 

2、MySQL備份都備份什麼?

通常備份如下幾個部分:

1.數據文件

2.日誌文件(好比事務日誌,二進制日誌)

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

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

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

 

3、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商業工具的替代工具。

 

4、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

相關文章
相關標籤/搜索