使用 Xtrabackup實現MySQL定時增量備份

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>

相關文章
相關標籤/搜索