1、Xtrabackup簡介html
Percona XtraBackup是一款免費、開源、徹底在線的Percona Server、MySQL或MariaDB備份解決方案。XtraBackup能夠實現對事務系統進行無阻塞、強壓縮、高安全的備份,而不影響在線運行的業務。其自帶的工具innobackupex能夠實現對MyISAM、InnoDB類型的表進行備份。mysql
還有如下特色:git
備份快速和可靠github
備份時不中段在線交易事務sql
經過壓縮節省存儲空間和帶寬(經過工具qpress)shell
自動對備份進行校驗數據庫
恢復還原快速安全
更多介紹,請參數官方網站。oracle
2、安裝app
系統環境 Linux CentOS 6.5 x86_64
數據庫 MySQL 5.1.73
yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
yum install percona-xtrabackup-20 yum install qpress
我安裝的是2.x的版本,沒有安裝最新版本,最新版本對某個MySQL 5.1系列不支持了。根據你本身的MySQL版本選擇安裝。
檢查是否安裝成功
xtrabackup -v innobackupex -v innobackupex-1.5.1 -v
查看安裝的路徑
#後面的版本號換成你本身安裝的 rpm -ql percona-xtrabackup-20
3、基本備份流程介紹
XtraBacup主要使用兩個命令進行備份:xtrabackup和innobackupex,因主xtrabackup命令不支持MyISAM的備份(不會備份.frm相關文件),而根據業務特色通常兩類表存儲類型MyISAM和InnoDB均可能有,全部這裏只時候介紹使用innobackupex命令的使用。
完整的流程主要有3步:
一、備份(Create)
二、執行準備操做(Prepare)。即對事務日誌進行提交或回滾,準備進行下一步的恢復操做
三、恢復(Restore)
上面3個步驟中,1和3好理解,第2步要當心些,由於關係你的數據可否正常進行徹底的恢復。MySQL對InnoDB存儲類型的全部事務操做都存在數據目錄的ibdata1文件裏(各位能夠查看下該文件每每很是大),若是開了主-從模式的,還有mysql-bin.000x相關日誌傳輸的記錄文件,這些記錄都跟prepare步聚有關,都是對這些日誌的合併的操做了。實踐中,只要記住一點:只在要恢復數據庫時才行prepare步驟!!看到--apply-log參數時表示都是在合併日誌。
下面看一個基本的增量備份步驟,全量備份不介紹(實際上增量備份也要一個全量備份,並且全量備份在實踐中比較少遇到,通常都是增量備份)。
#準備一個全庫備份,備份目錄會自動根據當前日期建立,如/path/to/backup/dir/2011-5-23_23-01-18, #若是不想它建立子目錄, 添加參數 --no-timestamp innobackupex --user=USER --password=PASSWORD /path/to/backup/dir/ #1小時後,執行第1個增量備份,假設$FULLBACKUP=/path/to/backup/dir/2011-5-23_23-01-18, #/path/to/inc/dir 是增量備份根目錄,執行完後假設是/path/to/inc/dir/2011-12-25_00-01-00/ innobackupex --user=USER --password=PASSWORD --incremental /path/to/inc/dir --incremental-basedir=$FULLBACKUP #好了,若是隻是備份,到這裏就結束了,下面是開始準備還原了,先執行合併日誌的prepare步驟 #################如下爲還原數據庫的步驟######################################## #還原步驟一、全量備份的重作日誌redo log 進行提交 innobackupex --apply-log --redo-only $FULLBACKUP --use-memory=1G --user=USER --password=PASSWORD #還原步驟二、 #而後逐一對增量備份的事務日誌進行合併到全量備份裏,有多少個增量就按順序逐一合併, #若是增量都是基於全量的最後一個增量,則只對最後一個增量合併就行; #若是你的增量備份方案是對增量進行增量備份的,則要按順序逐一合併增量日誌!! innobackupex --apply-log --redo-only $FULLBACKUP --incremental-dir=$INCREMENTALBACKUP --use-memory=1G --user=USER --password=PASSWORD #還原步驟三、 #prepare的最後一步,對已經合併重作日誌redo log的全庫 回滾未提交的事件 innobackupex-1.5.1 --apply-log $FULLBACKUP --use-memory=1G --user=$USERNAME --password=$PASSWORD #還原步驟四、 #恢復。恢復的路徑將從my.cnf獲取。還原時注意寫入目錄要爲空,通常是 /var/lib/mysql #先解壓縮ibdata1.qp文件 #cat ibdata1.qp |qpress -di . 此步驟不能直接運行,要使用 --apply-log 命令 innobackupex --copy-back /path/to/backup/dir/2011-5-23_23-01-18 chown -R mysql:mysql /var/lib/mysql
4、個人備份方案
根據目前業務的特色,我採用的備份方案是天天全量,每2小時增量的方案,同時按期對過時備份進行清理,主要經過一個腳本實現備份的執行。
下載備份shell腳本(注意:此腳本僅此學術研究使用,對於形成的任何風險和損失概不負責)。
crontab -e 0 4,10,12,14,16,18,20 * * * /xxx/scripts/mysql_backup.sh
#注意:上面的執行時間要有一個符合你全備做業的時間。
5、總結
對於任何業務系統,數據都很重要,有一款好的數據備份方案,就有了風險的基本防範措施。本文介紹的XtraBackup工具的使用,在業內仍是比較流行的一種,但願對你們有所幫助。下一步,能夠考慮實現異地容災等方案,逐步實現數據安全的最大化!
參考文檔
Xtrabackup增量備份
https://www.percona.com/doc/percona-xtrabackup/2.2/howtos/recipes_ibkx_inc.html
關於重作日誌redo log
https://docs.oracle.com/cd/B28359_01/server.111/b28310/onlineredo001.htm
How InnoDB handles REDO logging
https://www.percona.com/blog/2011/02/03/how-innodb-handles-redo-logging/
<做者 朱淦 350050183@qq.com 2015.11.4>