1、Xtrabackup bin目錄文件 介紹
1)innobackupex
innobackupex 是xtrabackup的一個(gè)符號(hào)鏈接 . 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
一個(gè)由C編譯而來(lái)的二進(jìn)制文件,可以整備MySQL database instance with MyISAM, InnoDB, and XtraDB tables
3)xbcrypt
用來(lái)加密或解密備份的數(shù)據(jù)
4)xbstream
用來(lái)解壓或壓縮xbstream格式的壓縮文件
5)xbcloud
utility used for downloading and uploading full or part of xbstream archive from/to cloud.
2、Percona XtraBackup info
是開源免費(fèi)的MySQL數(shù)據(jù)庫(kù)熱備份軟件,它能對(duì)InnoDB和XtraDB存儲(chǔ)引擎的數(shù)據(jù)庫(kù)非阻塞地備份(對(duì)于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
無(wú)需停止數(shù)據(jù)庫(kù)進(jìn)行InnoDB熱備
增量備份MySQL
流壓縮到傳輸?shù)狡渌?wù)器
在線移動(dòng)表
能比較容易地創(chuàng)建主從同步
備份MySQL時(shí)不會(huì)增大服務(wù)器負(fù)載
3、Xtrabackup工具支持對(duì)InnoDB存儲(chǔ)引擎的增量備份,工作原理如下
1、在InnoDB內(nèi)部會(huì)維護(hù)一個(gè)redo/undo日志文件,也可以叫做事務(wù)日志文件。事務(wù)日志會(huì)存儲(chǔ)每一個(gè)InnoDB表數(shù)據(jù)的記錄修改。當(dāng)InnoDB啟動(dòng)時(shí),InnoDB會(huì)檢查數(shù)據(jù)文件和事務(wù)日志,并執(zhí)行兩個(gè)步驟:它應(yīng)用(前滾)已經(jīng)提交的事務(wù)日志到數(shù)據(jù)文件,并將修改過(guò)但沒(méi)有提交的數(shù)據(jù)進(jìn)行回滾操作。
2、Xtrabackup在啟動(dòng)時(shí)會(huì)記住log sequence number(LSN),并且復(fù)制所有的數(shù)據(jù)文件。復(fù)制過(guò)程需要一些時(shí)間,所以這期間如果數(shù)據(jù)文件有改動(dòng),那么將會(huì)使數(shù)據(jù)庫(kù)處于一個(gè)不同的時(shí)間點(diǎn)。這時(shí),xtrabackup會(huì)運(yùn)行一個(gè)后臺(tái)進(jìn)程,用于監(jiān)視事務(wù)日志,并從事務(wù)日志復(fù)制最新的修改。Xtrabackup必須持續(xù)的做這個(gè)操作,是因?yàn)槭聞?wù)日志是會(huì)輪轉(zhuǎn)重復(fù)的寫入,并且事務(wù)日志可以被重用。所以xtrabackup自啟動(dòng)開始,就不停的將事務(wù)日志中每個(gè)數(shù)據(jù)文件的修改都記錄下來(lái)。
3、上面就是xtrabackup的備份過(guò)程。接下來(lái)是準(zhǔn)備(prepare)過(guò)程,在這個(gè)過(guò)程中,xtrabackup使用之前復(fù)制的事務(wù)日志,對(duì)各個(gè)數(shù)據(jù)文件執(zhí)行災(zāi)難恢復(fù)(就像mysql剛啟動(dòng)時(shí)要做的一樣)。當(dāng)這個(gè)過(guò)程結(jié)束后,數(shù)據(jù)庫(kù)就可以做恢復(fù)還原了,這個(gè)過(guò)程在xtrabackup的編譯二進(jìn)制程序中實(shí)現(xiàn)。程序innobackupex可以允許我們備份MyISAM表和frm文件從而增加了便捷和功能。Innobackupex會(huì)啟動(dòng)xtrabackup,直到xtrabackup復(fù)制數(shù)據(jù)文件后,然后執(zhí)行FLUSH TABLES WITH READ LOCK來(lái)阻止新的寫入進(jìn)來(lái)并把MyISAM表數(shù)據(jù)刷到硬盤上,之后復(fù)制MyISAM數(shù)據(jù)文件,最后釋放鎖。
4、備份MyISAM和InnoDB表最終會(huì)處于一致,在準(zhǔn)備(prepare)過(guò)程結(jié)束后,InnoDB表數(shù)據(jù)已經(jīng)前滾到整個(gè)備份結(jié)束的點(diǎn),而不是回滾到xtrabackup剛開始時(shí)的點(diǎn)。這個(gè)時(shí)間點(diǎn)與執(zhí)行FLUSH TABLES WITH READ LOCK的時(shí)間點(diǎn)相同,所以myisam表數(shù)據(jù)與InnoDB表數(shù)據(jù)是同步的。類似oracle的,InnoDB的prepare過(guò)程可以稱為recover(恢復(fù)),myisam的數(shù)據(jù)復(fù)制過(guò)程可以稱為restore(還原)。
5、Xtrabackup 和 innobackupex這兩個(gè)工具都提供了許多前文沒(méi)有提到的功能特點(diǎn)。手冊(cè)上有對(duì)各個(gè)功能都有詳細(xì)的介紹。簡(jiǎn)單介紹下,這些工具提供了如流(streaming)備份,增量(incremental)備份等,通過(guò)復(fù)制數(shù)據(jù)文件,復(fù)制日志文件和提交日志到數(shù)據(jù)文件(前滾)實(shí)現(xiàn)了各種復(fù)合備份方式。
二、安裝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
三、全部數(shù)據(jù)庫(kù)備份與還原
1、備份
//全部數(shù)據(jù)庫(kù)備份
innobackupex --user=root --password=123456 /data/backup/
//單數(shù)據(jù)庫(kù)備份
innobackupex --user=root --password=123456 --database=backup_test /data/backup/
//多庫(kù)
innobackupex--user=root --password=123456 --include='dba.*|dbb.*' /data/backup/
//多表
innobackupex --user=root --password=123456 --include='dba.tablea|dbb.tableb' /data/backup/
//數(shù)據(jù)庫(kù)備份并壓縮
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
//不過(guò)注意解壓需要手動(dòng)進(jìn)行,并加入 -i 的參數(shù),否則無(wú)法解壓出所有文件,疑惑了好長(zhǎng)時(shí)間
//如果有錯(cuò)誤可以加上 --defaults-file=/etc/my.cnf
2、還原
service mysqld stop
mv /data/mysql /data/mysql_bak && mkdir -p /data/mysql
//--apply-log選項(xiàng)的命令是準(zhǔn)備在一個(gè)備份上啟動(dòng)mysql服務(wù)
innobackupex --defaults-file=/etc/my.cnf --user=root --apply-log /data/backup/2015-09-18_16-35-12
//--copy-back 選項(xiàng)的命令從備份目錄拷貝數(shù)據(jù),索引,日志到my.cnf文件里規(guī)定的初始位置
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、創(chuàng)建測(cè)試數(shù)據(jù)庫(kù)和表
create database backup_test; //創(chuàng)建庫(kù)
CREATE TABLE `backup` ( //創(chuàng)建表
`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:針對(duì)哪個(gè)做增量備份
//第一次備份
mysql> INSERT INTO backup (name) VALUES ('xx'),('xxxx'); //插入數(shù)據(jù)
innobackupex --user=root --incremental-basedir=/data/backup/2015-09-18_16-35-12 --incremental /data/backup/
//再次備份
mysql> INSERT INTO backup (name) VALUES ('test'),('testd'); //在插入數(shù)據(jù)
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這個(gè)數(shù)據(jù)庫(kù)刪除掉,drop database backup_test;這樣可以對(duì)比還原后
4、增量還原
分為兩個(gè)步驟
a.prepare
innobackupex --apply-log /path/to/BACKUP-DIR
此時(shí)數(shù)據(jù)可以被程序訪問(wèn)使用;可使用—use-memory選項(xiàng)指定所用內(nèi)存以加快進(jìn)度,默認(rèn)100M;
b.recover
innobackupex --copy-back /path/to/BACKUP-DIR
從my.cnf讀取datadir/innodb_data_home_dir/innodb_data_file_path等變量
先復(fù)制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 第一次增量備份產(chǎn)生的目錄
#/data/backup/2015-09-18_18-11-43 第二次增量備份產(chǎn)生的目錄
恢復(fù)數(shù)據(jù)
service mysqld stop
innobackupex --copy-back /data/backup/2015-09-18_16-35-12
service mysqld start
五、innobackup 常用參數(shù)說(shuō)明
--defaults-file
同xtrabackup的--defaults-file參數(shù)
--apply-log
對(duì)xtrabackup的--prepare參數(shù)的封裝
--copy-back
做數(shù)據(jù)恢復(fù)時(shí)將備份數(shù)據(jù)文件拷貝到MySQL服務(wù)器的datadir ;
--remote-host=HOSTNAME
通過(guò)ssh將備份數(shù)據(jù)存儲(chǔ)到進(jìn)程服務(wù)器上;
--stream=[tar]
備 份文件輸出格式, tar時(shí)使用tar4ibd , 該文件可在XtarBackup binary文件中獲得.如果備份時(shí)有指定--stream=tar, 則tar4ibd文件所處目錄一定要在$PATH中(因?yàn)槭褂玫氖莟ar4ibd去壓縮, 在XtraBackup的binary包中可獲得該文件)。
在 使用參數(shù)stream=tar備份的時(shí)候,你的xtrabackup_logfile可能會(huì)臨時(shí)放在/tmp目錄下,如果你備份的時(shí)候并發(fā)寫入較大的話 xtrabackup_logfile可能會(huì)很大(5G+),很可能會(huì)撐滿你的/tmp目錄,可以通過(guò)參數(shù)--tmpdir指定目錄來(lái)解決這個(gè)問(wèn)題。
--tmpdir=DIRECTORY
當(dāng)有指定--remote-host or --stream時(shí), 事務(wù)日志臨時(shí)存儲(chǔ)的目錄, 默認(rèn)采用MySQL配置文件中所指定的臨時(shí)目錄tmpdir
--redo-only --apply-log組,
強(qiáng)制備份日志時(shí)只redo ,跳過(guò)rollback。這在做增量備份時(shí)非常必要。
--use-memory=#
該參數(shù)在prepare的時(shí)候使用,控制prepare時(shí)innodb實(shí)例使用的內(nèi)存量
--throttle=IOS
同xtrabackup的--throttle參數(shù)
--sleep=是給ibbackup使用的,指定每備份1M數(shù)據(jù),過(guò)程停止拷貝多少毫秒,也是為了在備份時(shí)盡量減小對(duì)正常業(yè)務(wù)的影響,具體可以查看ibbackup的手冊(cè) ;
--compress[=LEVEL]
對(duì)備份數(shù)據(jù)迚行壓縮,僅支持ibbackup,xtrabackup還沒(méi)有實(shí)現(xiàn);
--include=REGEXP
對(duì) xtrabackup參數(shù)--tables的封裝,也支持ibbackup。備份包含的庫(kù)表,例如:--include="test.*",意思是要備份 test庫(kù)中所有的表。如果需要全備份,則省略這個(gè)參數(shù);如果需要備份test庫(kù)下的2個(gè)表:test1和test2,則寫 成:--include="test.test1|test.test2"。也可以使用通配符,如:--include="test.test*"。
--databases=LIST
列出需要備份的databases,如果沒(méi)有指定該參數(shù),所有包含MyISAM和InnoDB表的database都會(huì)被備份;
--uncompress
解壓備份的數(shù)據(jù)文件,支持ibbackup,xtrabackup還沒(méi)有實(shí)現(xiàn)該功能;
--slave-info,
備 份從庫(kù), 加上--slave-info備份目錄下會(huì)多生成一個(gè)xtrabackup_slave_info 文件, 這里會(huì)保存主日志文件以及偏移, 文件內(nèi)容類似于:CHANGE MASTER TO MASTER_LOG_FILE='', MASTER_LOG_POS=0
--socket=SOCKET
指定mysql.sock所在位置,以便備份進(jìn)程登錄mysql.
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com