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
[root@xiaoya ~]# yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
[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 ……
[root@xiaoya ~]# yum install percona-xtrabackup-22
[root@xiaoya ~]# rpm -qa percona-xtrabackup-22 percona-xtrabackup-22-2.2.13-1.el6.x86_64
官方原理:
在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)備份等,經過複製數據文件,複製日誌文件和提交日誌到數據文件(前滾)實現了各類複合備份方式。
[root@xiaoya backup]# innobackupex --defaults-file=/data/3306/my.cnf --user=root --password=123456 --socket=/data/3306/mysql.sock /backup/full --no-timestamp
增量備份數據
####增量備份是基於第一個全備的
[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
增量備份是基於第一次增量備份的
[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)、對總體基礎備份進行恢復,回滾哪些未提交的數據
全量恢復
[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/
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。喜歡技術的一塊兒來交流吧