MySQL備份工具之xtrabackup

一、xtrabackup簡介

Xtrabackup是一個對InnoDB作數據備份的工具,支持在線熱備份(備份時mysql

不影響數據讀寫),是商業備份工具InnoDB Hotbackup的一個很好的替代品。
  Xtrabackup有兩個主要的工具:xtrabackup、innobackupex
  (1)xtrabackup只能備份InnoDB和XtraDB兩種數據表,而不能備份MyISAM數據表
  (2)innobackupex-1.5.1則封裝了xtrabackup,是一個腳本封裝,因此能同時備份處理innodb和myisam,但在處理myisam時須要加一個讀鎖sql

官網:https://www.percona.com/數據庫

 

Xtrabackup的特性:微信

Xtrabackup是由percona提供的mysql數據庫備份工具,據官方介紹,這也是世界上唯一一款開源的可以對innodb和xtradb數據庫進行熱備的工具。特色:app

(1)備份過程快速、可靠;socket

(2)備份過程不會打斷正在執行的事務;工具

(3)可以基於壓縮等功能節約磁盤空間和流量;spa

(4)自動實現備份檢驗;debug

(5)還原速度快;rest

二、xtrabackup的安裝

2.1 Install the Percona repository

[root@xiaoya ~]# yum install

http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm

2.2 Testing the repository

[root@xiaoya ~]# yum list | grep percona

……

percona-xtrabackup-22.x86_64                2.2.13-1.el6                percona-xtrabackup.x86_64                   2.3.3-1.el6                 percona-xtrabackup-20.x86_64                2.0.8-587.rhel6             percona-xtrabackup-20-debuginfo.x86_64      2.0.8-587.rhel6             percona-xtrabackup-20-test.x86_64           2.0.8-587.rhel6             percona-xtrabackup-21.x86_64                2.1.9-746.rhel6             percona-xtrabackup-21-debuginfo.x86_64                                2.1.9-746.rhel6            

percona-xtrabackup-22-debuginfo.x86_64                                   2.2.13-1.el6               

percona-xtrabackup-debuginfo.x86_64        2.3.3-1.el6                 percona-xtrabackup-test.x86_64                                            2.3.3-1.el6                

percona-xtrabackup-test-21.x86_64           2.1.9-746.rhel6             percona-xtrabackup-test-22.x86_64                                        2.2.13-1.el6               

……

2.3 Install the packages

[root@xiaoya ~]# yum install percona-xtrabackup-22

2. 4 check tish packages

[root@xiaoya ~]# rpm -qa percona-xtrabackup-22

percona-xtrabackup-22-2.2.13-1.el6.x86_64

三、xtrabackup備份的原理

官方原理:

在InnoDB內部會維護一個redo日誌文件,咱們也能夠叫作事務日誌文件。事務日誌會存儲每個InnoDB表數據的記錄修改。當InnoDB啓動時,InnoDB會檢查數據文件和事務日誌,並執行兩個步驟:它應用(前滾)已經提交的事務日誌到數據文件,並將修改過但沒有提交的數據進行回滾操做。

xtrabackup在啓動時會記住log sequence number(LSN),而且複製全部的數據文件。複製過程須要一些時間,因此這期間若是數據文件有改動,那麼將會使數據庫處於一個不一樣的時間點。這時,xtrabackup會運行一個後臺進程,用於監視事務日誌,並從事務日誌複製最新的修改。xtrabackup必須持續的作這個操做,是由於事務日誌是會輪轉重複的寫入,而且事務日誌能夠被重用。因此xtrabackup自啓動開始,就不停的將事務日誌中每一個數據文件的修改都記錄下來。

上面就是xtrabackup的備份過程。接下來是準備(prepare)過程。在這個過程當中,xtrabackup使用以前複製的事務日誌,對各個數據文件執行災難恢復(就像MySQL剛啓動時要作的同樣)。當這個過程結束後,數據庫就能夠作恢復還原了。

以上的過程在xtrabackup的編譯二進制程序中實現。程序innobackupex能夠容許咱們備份MyISAM表和frm文件從而增長了便捷和功能。Innobackupex會啓動xtrabackup,直到xtrabackup複製數據文件後,而後執行FLUSH TABLES WITH READ LOCK來阻止新的寫入進來並把MyISAM表數據刷到硬盤上,以後複製MyISAM數據文件,最後釋放鎖。

備份MyISAM和InnoDB表最終會處於一致,在準備(prepare)過程結束後,InnoDB表數據已經前滾到整個備份結束的點,而不是回滾到xtrabackup剛開始時的點。這個時間點與執行FLUSH TABLES WITH READ LOCK的時間點相同,因此MyISAM表數據與InnoDB表數據是同步的。相似Oracle的,InnoDB的prepare過程能夠稱爲recover(恢復),MyISAM的數據複製過程能夠稱爲restore(還原)。

xtrabackup和innobackupex這兩個工具都提供了許多前文沒有提到的功能特色。手冊上有對各個功能都有詳細的介紹。簡單介紹下,這些工具提供瞭如流(streaming)備份,增量(incremental)備份等,經過複製數據文件,複製日誌文件和提交日誌到數據文件(前滾)實現了各類複合備份方式。

 

 

四、數據庫增量備份案例分析

4.1 增量備份以前的全量備份

[root@xiaoya backup]# innobackupex --defaults-file=/data/3306/my.cnf --user=root --password=123456 --socket=/data/3306/mysql.sock /backup/full --no-timestamp

4.2 第一次增量備份

增量備份數據

####增量備份是基於第一個全備的

[root@xiaoya inc_1]# innobackupex --defaults-file=/data/3306/my.cnf --user=root --password=123456  --socket=/data/3306/mysql.sock --incremental-basedir=/backup/full --incremental /backup/inc_1 --no-timestamp --parallel=2

4.3 第二次增量備份

增量備份是基於第一次增量備份的

[root@xiaoya backup]# innobackupex --defaults-file=/data/3306/my.cnf --user=root --password=123456 --socket=/data/3306/mysql.sock --incremental-basedir=/backup/inc_1 --incremental /backup/inc_2 --no-timestamp --parallel=2

五、經過備份恢復數據

增量備份恢復大致分爲三個步郰:

1)、恢復基礎備份(全備)

2)、恢復增量備份到基礎備份(開始恢復的增量備份要添加--redo-only參數,到最後一次增量備份去掉--redo-only參數)

3)、對總體基礎備份進行恢復,回滾哪些未提交的數據

5.1 數據恢復

全量恢復

[root@xiaoya inc_2]# innobackupex --apply-log --redo-only --use-memory=500m /backup/full

將增量備份inc_1應用到基礎備份2015-12-29_14-35-13:(使用redo-only參數,只應用哪些已經提交的事務,而不回滾那些未提交的事務)

[root@xiaoya ~]# innobackupex --user=root --password=123456 --apply-log --use-memory=500m /backup/full/ --redo-only --incremental-dir=/backup/inc_1/

將增量備份inc_2應用到全備full(不使用redo-only,回滾哪些未提交的事務)

[root@xiaoya ~]# innobackupex --user=root --password=123456 --apply-log --use-memory=500m /backup/full/ --incremental-dir=/backup/inc_2

把全部那些合在一塊兒的備份進行應用,並回滾未提交的事務

[root@xiaoya ~]# innobackupex --user=root --password=123456 --apply-log --use-memory=500m /backup/full/

5.2 把恢復完的備份數據拷貝到數據庫數據存儲的目錄下:

1)、關閉數據庫

[root@xiaoya ~]# /data/3306/mysql stop

Stoping MySQL...

[root@xiaoya ~]# lsof -i:3306

創建新的數據庫存儲目錄

[root@xiaoya 3306]# mv data data.rep1

[root@xiaoya 3306]# mkdir data

查看最近一次的備份

[root@xiaoya full]# ls -lt

[root@xiaoya full]# ls -lt

總用量 231468

-rw-r----- 1 root root 134217728 12月 29 22:20 ibdata1

-rw-r--r-- 1 root root  50331648 12月 29 22:20 ib_logfile0

-rw-r----- 1 root root       113 12月 29 22:20 xtrabackup_checkpoints

-rw-r--r-- 1 root root        32 12月 29 22:20 xtrabackup_binlog_pos_innodb

-rw-r--r-- 1 root root  50331648 12月 29 22:20 ib_logfile1

-rw-r----- 1 root root       618 12月 29 22:19 xtrabackup_info

-rw-r----- 1 root root        21 12月 29 22:19 xtrabackup_binlog_info

drwx------ 2 root root      4096 12月 29 22:19 mysql

drwx------ 2 root root      4096 12月 29 22:19 performance_schema

drwx------ 2 root root      4096 12月 29 22:19 test

drwx------ 2 root root      4096 12月 29 22:19 2015-12-29_15-39-37

drwx------ 2 root root      4096 12月 29 22:19 2015-12-29_15-39-52

drwx------ 2 root root      4096 12月 29 22:19 2015-12-29_15-36-19

-rw-r----- 1 root root   2097152 12月 29 22:18 xtrabackup_logfile

-rw-r----- 1 root root       386 12月 29 22:11 backup-my.cnf

 

選擇最後合成的備份目錄:2015-12-29_15-39-37

拷貝備份數據到數據庫存儲目錄

[root@xiaoya 3306]# innobackupex --defaults-file=/data/3306/my.cnf --copy-back /backup/full/

 

PS:這是好久之前整理的,沒有保存參考資料,若有雷同,請做者見諒。

 

爲了方便你們交流,本人開通了微信公衆號,和QQ羣291519319。喜歡技術的一塊兒來交流吧

相關文章
相關標籤/搜索