使用XtraBackup給MySQL線上增量備份及恢複資料庫

來源:互聯網
上載者:User

使用XtraBackup給MySQL線上增量備份及恢複資料庫

一、Percona Xtrabackup 簡介

1、Xtrabackup  bin目錄檔案 介紹

1)innobackupex

innobackupex 是xtrabackup的一個符號連結 . innobackupex still supports all features and syntax as 2.2 version did, but is now deprecated and will be removed in next major release.

2)xtrabackup

一個由C編譯而來的二進位檔案,可以整備MySQL database instance with MyISAM, InnoDB, and XtraDB tables

3)xbcrypt

用來加密或解密備份的資料

4)xbstream

用來解壓或壓縮xbstream格式的壓縮檔

5)xbcloud

utility used for downloading and uploading full or part of xbstream archive from/to cloud.

2、Percona XtraBackup info

是開源免費的MySQL資料庫熱備份軟體,它能對InnoDB和XtraDB儲存引擎的資料庫非阻塞地備份(對於MyISAM的備份同樣需要加表鎖)

  • you can achieve the following benefits: (https://www.percona.com/doc/percona-xtrabackup/2.3/intro.html)
  • Backups that complete quickly and reliably
  • Uninterrupted transaction processing during backups
  • Savings on disk space and network bandwidth
  • Automatic backup verification
  • Higher uptime due to faster restore time

features 

  • Create hot InnoDB backups without pausing your database
  • Make incremental backups of MySQL
  • Stream compressed MySQL backups to another server
  • Move tables between MySQL servers on-line
  • Create new MySQL replication slaves easily
  • Backup MySQL without adding load to the server
  • 無需停止資料庫進行InnoDB熱備
  • 增量備份MySQL
  • 流壓縮到傳輸到其它伺服器
  • 線上移動表
  • 能比較容易地建立主從同步
  • 備份MySQL時不會增大伺服器負載

3、Xtrabackup工具支援對InnoDB儲存引擎的增量備份,工作原理如下

1、在InnoDB內部會維護一個redo/undo記錄檔,也可以叫做交易記錄檔。交易記錄會儲存每一個InnoDB表資料的記錄修改。當InnoDB啟動時,InnoDB會檢查資料檔案和交易記錄,並執行兩個步驟:它應用(前滾)已經提交的交易記錄到資料檔案,並將修改過但沒有提交的資料進行復原操作。

2、Xtrabackup在啟動時會記住log sequence number(LSN),並且複製所有的資料檔案。複製過程需要一些時間,所以這期間如果資料檔案有改動,那麼將會使資料庫處於一個不同的時間點。這時,xtrabackup會運行一個後台進程,用於監視交易記錄,並從交易記錄複製最新的修改。Xtrabackup必須持續的做這個操作,是因為交易記錄是會輪轉重複的寫入,並且交易記錄可以被重用。所以xtrabackup自啟動開始,就不停的將交易記錄中每個資料檔案的修改都記錄下來。

3、上面就是xtrabackup的備份過程。接下來是準備(prepare)過程,在這個過程中,xtrabackup使用之前複製的交易記錄,對各個資料檔案執行災難恢複(就像mysql剛啟動時要做的一樣)。當這個過程結束後,資料庫就可以做恢複還原了,這個過程在xtrabackup的編譯二進位程式中實現。程式innobackupex可以允許我們備份MyISAM表和frm檔案從而增加了便捷和功能。Innobackupex會啟動xtrabackup,直到xtrabackup複製資料檔案後,然後執行FLUSH TABLES WITH READ LOCK來阻止新的寫入進來並把MyISAM表資料刷到硬碟上,之後複製MyISAM資料檔案,最後釋放鎖。

4、備份MyISAM和InnoDB表最終會處於一致,在準備(prepare)過程結束後,InnoDB表資料已經前滾到整個備份結束的點,而不是復原到xtrabackup剛開始時的點。這個時間點與執行FLUSH TABLES WITH READ LOCK的時間點相同,所以myisam表資料與InnoDB表資料是同步的。類似Oracle的,InnoDB的prepare過程可以稱為recover(恢複),myisam的資料複製過程可以稱為restore(還原)。

5、Xtrabackup 和 innobackupex這兩個工具都提供了許多前文沒有提到的功能特點。手冊上有對各個功能都有詳細的介紹。簡單介紹下,這些工具提供了如流(streaming)備份,增量(incremental)備份等,通過複製資料檔案,複製記錄檔和提交日誌到資料檔案(前滾)實現了各種複合備份方式。

二、安裝xtrabackup

1、安裝

yum -y install perl perl-devel libaio libaio-devel
yum -y install  perl-DBI  perl-DBD-MySQL  perl-TermReadKey perl-devel perl-Time-HiRes
cd /usr/local/src
wget -c https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.3.2/ \
binary/tarball/percona-xtrabackup-2.3.2-Linux-x86_64.tar.gz
tar -zxf percona-xtrabackup-2.3.2-Linux-x86_64.tar.gz
cd percona-xtrabackup-2.3.2-Linux-x86_64/
mkdir  /usr/local/xtrabackup
mv bin  /usr/local/xtrabackup/
ln -s /usr/local/xtrabackup/bin/* /usr/bin/

2、修改my.cnf

[mysqld]
datadir=/var/lib/mysql
innodb_data_home_dir = /data/mysql/ibdata
innodb_log_group_home_dir = /data/mysql/iblogs
innodb_data_file_path=ibdata1:10M;ibdata2:10M:autoextend
innodb_log_files_in_group = 2
innodb_log_file_size = 1G

三、全部Database Backup與還原

1、備份

//全部Database Backup
innobackupex --user=root --password=123456 /data/backup/
//單Database Backup
innobackupex --user=root --password=123456 --database=backup_test /data/backup/
//多庫
innobackupex--user=root --password=123456 --include='dba.*|dbb.*' /data/backup/
//多表
innobackupex --user=root --password=123456 --include='dba.tablea|dbb.tableb' /data/backup/
//Database Backup並壓縮
log=zztx01_`date +%F_%H-%M-%S`.log
db=zztx01_`date +%F_%H-%M-%S`.tar.gz
innobackupex --user=root --stream=tar /data/backup  2>/data/backup/$log | gzip 1> /data/backup/$db
//不過注意解壓需要手動進行,並加入 -i 的參數,否則無法解壓出所有檔案,疑惑了好長時間
//如果有錯誤可以加上  --defaults-file=/etc/my.cnf

2、還原

service mysqld stop
mv /data/mysql /data/mysql_bak && mkdir -p /data/mysql
//--apply-log選項的命令是準備在一個備份上啟動mysql服務
innobackupex --defaults-file=/etc/my.cnf --user=root --apply-log /data/backup/2015-09-18_16-35-12
//--copy-back 選項的命令從備份目錄拷貝資料,索引,日誌到my.cnf檔案裡規定的初始位置
innobackupex --defaults-file=/etc/my.cnf --user=root --copy-back /data/backup/2015-09-18_16-35-12
chown -R mysql.mysql /data/mysq
service mysqld start

四、增量備份與還原
1、建立測試資料庫和表
create database backup_test; //建立庫
CREATE TABLE `backup` ( //建立表
`id` int(11) NOT NULL AUTO_INCREMENT ,
`name` varchar(20) NOT NULL DEFAULT '' ,
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ,
`del` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=myisam DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
2、增量備份
#--incremental:增量備份的檔案夾
#--incremental-dir:針對哪個做增量備份
//第一次備份
mysql> INSERT INTO backup (name) VALUES ('xx'),('xxxx'); //插入資料
innobackupex  --user=root --incremental-basedir=/data/backup/2015-09-18_16-35-12 --incremental /data/backup/
//再次備份
mysql> INSERT INTO backup (name) VALUES ('test'),('testd'); //在插入資料
innobackupex --user=root --incremental-basedir=/data/backup/2015-09-18_18-05-20 --incremental /data/backup/
3、查看增量備份記錄檔案
[root@localhost 2015-09-18_16-35-12]# cat xtrabackup_checkpoints //全備目錄下的檔案
backup_type = full-prepared
from_lsn = 0 //全備起始為0
to_lsn = 23853959
last_lsn = 23853959
compact = 0
[root@localhost 2015-09-18_18-05-20]# cat xtrabackup_checkpoints //第一次增量備份目錄下的檔案
backup_type = incremental
from_lsn = 23853959
to_lsn = 23854112
last_lsn = 23854112
compact = 0
[root@localhost 2015-09-18_18-11-43]# cat xtrabackup_checkpoints //第二次增量備份目錄下的檔案
backup_type = incremental
from_lsn = 23854112
to_lsn = 23854712
last_lsn = 23854712
compact = 0
增量備份做完後,把backup_test這個資料庫刪除掉,drop database backup_test;這樣可以對比還原後
4、增量還原
分為兩個步驟
a.prepare
innobackupex --apply-log /path/to/BACKUP-DIR
此時資料可以被程式訪問使用;可使用—use-memory選項指定所用記憶體以加快進度,預設100M;
b.recover
innobackupex --copy-back /path/to/BACKUP-DIR
從my.cnf讀取datadir/innodb_data_home_dir/innodb_data_file_path等變數
先複製MyISAM表,然後是innodb表,最後為logfile;--data-dir目錄必須為空白
開始合并
innobackupex --apply-log --redo-only /data/backup/2015-09-18_16-35-12
innobackupex --apply-log --redo-only --incremental /data/backup/2015-09-18_16-35-12 --incremental-dir=/data/backup/2015-09-18_18-05-20
innobackupex --apply-log --redo-only --incremental /data/backup/2015-09-18_16-35-12 --incremental-dir=/data/backup/2015-09-18_18-11-43
#/data/backup/2015-09-18_16-35-12 全備份目錄
#/data/backup/2015-09-18_18-05-20 第一次增量備份產生的目錄
#/data/backup/2015-09-18_18-11-43 第二次增量備份產生的目錄
恢複資料
service mysqld stop
innobackupex --copy-back /data/backup/2015-09-18_16-35-12
service mysqld start

五、innobackup 常用參數說明

--defaults-file
同xtrabackup的--defaults-file參數

--apply-log
對xtrabackup的--prepare參數的封裝

--copy-back
做資料恢複時將備份資料檔案拷貝到MySQL伺服器的datadir ;

--remote-host=HOSTNAME
通過ssh將備份資料存放區到進程伺服器上;

--stream=[tar]
備 份檔案輸出格式, tar時使用tar4ibd , 該檔案可在XtarBackup binary檔案中獲得.如果備份時有指定--stream=tar, 則tar4ibd檔案所處目錄一定要在$PATH中(因為使用的是tar4ibd去壓縮, 在XtraBackup的binary包中可獲得該檔案)。
在 使用參數stream=tar備份的時候,你的xtrabackup_logfile可能會臨時放在/tmp目錄下,如果你備份的時候並發寫入較大的話 xtrabackup_logfile可能會很大(5G+),很可能會撐滿你的/tmp目錄,可以通過參數--tmpdir指定目錄來解決這個問題。

--tmpdir=DIRECTORY
當有指定--remote-host or --stream時, 交易記錄臨時儲存的目錄, 預設採用MySQL設定檔中所指定的臨時目錄tmpdir

--redo-only --apply-log組,
強製備份日誌時只redo ,跳過rollback。這在做增量備份時非常必要。

--use-memory=#
該參數在prepare的時候使用,控制prepare時innodb執行個體使用的記憶體量

--throttle=IOS
同xtrabackup的--throttle參數

--sleep=是給ibbackup使用的,指定每備份1M資料,過程停止拷貝多少毫秒,也是為了在備份時盡量減小對正常業務的影響,具體可以查看ibbackup的手冊 ;

--compress[=LEVEL]
對備份資料迚行壓縮,僅支援ibbackup,xtrabackup還沒有實現;

--include=REGEXP
對 xtrabackup參數--tables的封裝,也支援ibbackup。備份包含的庫表,例如:--include="test.*",意思是要備份 test庫中所有的表。如果需要全備份,則省略這個參數;如果需要備份test庫下的2個表:test1和test2,則寫 成:--include="test.test1|test.test2"。也可以使用萬用字元,如:--include="test.test*"。

--databases=LIST
列出需要備份的databases,如果沒有指定該參數,所有包含MyISAM和InnoDB表的database都會被備份;

--uncompress
解壓備份的資料檔案,支援ibbackup,xtrabackup還沒有實現該功能;

--slave-info,
備 份從庫, 加上--slave-info備份目錄下會多產生一個xtrabackup_slave_info 檔案, 這裡會儲存主記錄檔以及位移, 檔案內容類別似於:CHANGE MASTER TO MASTER_LOG_FILE='', MASTER_LOG_POS=0

--socket=SOCKET
指定mysql.sock所在位置,以便備份進程登入mysql.

MySQL管理之使用XtraBackup進行熱備

MySQL開源備份工具Xtrabackup備份部署

MySQL Xtrabackup備份和恢複

用XtraBackup實現MySQL的主從複製快速部署【主不鎖表】

安裝和使用 Percona 推出的 Xtrabackup 備份 MySQL

XtraBackup 的詳細介紹:請點這裡
XtraBackup 的:請點這裡

本文永久更新連結地址:

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.