1 因為使用perl腳本編寫,安裝前應先安裝
yum install perl-Time-HiRes -y
yum -y install perl-DBD-MySQL.x86_64
一起安裝 yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL
2 安裝最新版,使用rpm -ivh 命令
tar包下載地址
http://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.2.10/binary/redhat/6/x86_64/Percona-XtraBackup-2.2.10-re623acb-el6-x86_64-bundle.tar
rpm -ivh percona-xtrabackup-2.2.10-1.el6.x86_64.rpm
3 測試安裝是否成功
yum list | grep percona
4 多實例備份
通常一般都直接使用innobackupex,因為它能同時備份InnoDB和MyISAM引擎的表。要注意的是my.cnf里datadir
(這一點很重要,在多實例中最好的解決方式為復制my.cnf到/backup/config文件夾下,配置--defaults-file=/back/config/my.cnf(3306.cnf))
這個參數是必須要指定的,xtrabackup_55是根據它去定位innodb數據文件的位置
4.1 創建備份目錄
# mkdir -p /backup/{config,full,incremental}
config: 存放my.cnf 可以直接將文件復制到config目錄下
cp /etc/my.cnf /backup/config/3306.cnf
full: 全備份目錄
incremental: 增量備份目錄
備份參數詳解:
1
innobackupex
[--sleep=MS] [--compress[=LEVEL]] [--include=REGEXP] [--user=NAME]
[--password=WORD] [--port=PORT] [--socket=SOCKET] [--no-timestamp]
[--ibbackup=IBBACKUP-BINARY] [--slave-info] [--stream=tar]
[--defaults-file=MY.CNF] [--databases=LIST] [--remote-host=HOSTNAME]
BACKUP-ROOT-DIR
2
回滾未提交的事務,先執行此句再恢復數據
innobackupex
--apply-log [--use-memory=MB] [--uncompress]
[--defaults-file=MY.CNF] [--ibbackup=IBBACKUP-BINARY]
BACKUP-DIR
3
innobackupex --copy-back [--defaults-file=MY.CNF] BACKUP-DIR
各參數說明:
--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.
4.2 全量備份
方式1普通方式
#innobackupex --defaults-file=/backup/config/3306.cnf --no-lock --user=harri --password
--socket=/var/lib/mysql/mysql_3306.sock /backup/full/
注 --no-lock為備份中不鎖表
此時表明成功
方式2備份並打包壓縮
innobackupex --user=harri --password --defaults-file=/backup/config/3306.cnf --socket=/var/lib/mysql/mysql_3306.sock --stream=tar /backup/full/ 2>/backup/full/eg.log | gzip 1>/backup/full/eg.tar.gz
說明:
--database=單獨對zztx數據庫做備份 ,若是不添加此參數那就那就是對全庫做備份
2>/backup/full/eg.log 輸出信息寫入日志中
1>/backup/full/eg.tar.gz 打包壓縮存儲到該文件中
這種備份時間會比較長,主要是執行壓縮操作。這種方式打的包需要使用tar izxvf解壓。參數-i是必須加上的。
此處可以寫個腳本做備份(backup.sh)
#!/bin/sh
echo "開始備份..."`date`
log=zztx01_`date +%y%m%d%H%M`.log
str=zztx01_`date +%y%m%d%H%M`.tar.gz
innobackupex --user=root --password=123456 --defaults-file=/etc/my.cnf --database=zztx --stream=tar /data/back_data/ 2>/data/back_data/$log | gzip 1>/data/back_data/$str
echo "備份完畢..."`date`
方式3(未測試)
備份到遠程服務器
innobackupex --database="testinnodb test" --user=root --defaults-file=/data0/mysql/my.cnf --no-lock --stream=tar /data0/backup/mysql/|ssh root@192.168.1.101 cat ">"/data0/backup.tar
4.3 備份恢復
1 關閉mysql服務
2 解壓 tar -izxvf zztx.tar.gz -C /backup/full/ 需要mkdir 文件夾
3
innobackupex --defaults-file=/backup/config/3306.cnf --socket=/var/lib/mysql/mysql_3306.sock --apply-log --no-lock /backup/full/(--apply-log選項的命令是准備在一個備份上啟動mysql服務)
(此步驟為恢復前的准備)
innobackupex --defaults-file=/backup/config/3306.cnf --socket=/var/lib/mysql/mysql_3306.sock --copy-back --no-lock /backup/full/ (--copy-back 選項的命令從備份目錄拷貝數據,索引,日志到my.cnf文 件里規定的初始位置。)
4.chown -R mysql.mysql data (此步驟一定要有)
5重啟數據庫,完成恢復
多實例注意事項 : 對於my.cnf [mysqld]結點下配置datadir路徑,根據恢復的實例不同,此處的路徑應該做相應的修改。
增量備份
(增量備份的前提是有一個全量備份,在全量備份的基礎上進行增量備份)
第一次增量備份
innobackupex --defaults-file=/backup/config/3306.cnf --socket=/var/lib/mysql/mysql_3306.sock
--no-lock --incremental /backup/incremental/ --incremental-basedir=/backup/full/
第二次增量備份
#innobackupex --defaults-file=/backup/config/3306.cnf --socket=/var/lib/mysql/mysql_3306.sock --no-lock --incremental /backup/incremental/ --incremental-basedir=/backup/incremental/2015-05-12_17-31-45/
參數說明:
1
2
|
--incremental :指定存儲本次增量備份的目錄
--incremental-basedir:上次備份的存儲目錄
|
4.4 增量備份恢復操作
1 關閉mysql服務
2
*(在全備上,使用—redo-only只做已提交事務,不回滾未提交事務,准備過程中除了最后一個不需要此參數,其他都需要,增量備份一定要確定順序,否則會破壞備份,切記,不確定順序可以去數據目錄下查看xtrabackup_checkpoints文件)
預備階段:
innobackupex --defaults-file=/backup/config/3306.cnf --socket=/var/lib/mysql/mysql_3306.sock --apply-log --redo-only --no-lock /backup/full/(--apply-log選項的命令是准備在一個備份上啟動mysql服務)
還原第一次增量備份
innobackupex --defaults-file=/backup/config/3306.cnf --socket=/var/lib/mysql/mysql_3306.sock --apply-log --redo-only --no-lock /backup/full/2015-05-12_18-07-37/ --incremental-dir=/backup/incremental/2015-05-12_18-09-32/
還原第二次增量備份
innobackupex --defaults-file=/backup/config/3306.cnf --socket=/var/lib/mysql/mysql_3306.sock --apply-log --redo-only --no-lock /backup/full/2015-05-12_18-07-37/ --incremental-dir=/backup/incremental/2015-05-12_18-09-32/
注:1、在增量備份還原過程中,預備階段最后一個增量的還原不需要 --redo-only 參數 如果忘記了,那么最后還要執行一遍
innobackupex --defaults-file=/backup/config/3306.cnf --socket=/var/lib/mysql/mysql_3306.sock --apply-log --no-lock /backup/full/
回滾所有未提交事務
2、還原增量備份前要先對完備進行
--apply-log --redo-only 然后才可以對每個增量做歸並
3、有可能提示加入mysql版本參數,根據提示添加即可 --ibbackup=xtrabackup_56
還原階段
預備階段完成后只需要對合成的總備份文件進行還原數據即可
innobackupex --defaults-file=/backup/config/3306.cnf --socket=/var/lib/mysql/mysql_3306.sock --copy-back /backup/full/2015-05-12_18-07-37/
4.chown -R mysql.mysql data (此步驟一定要有)
5重啟數據庫,完成恢復
4.5 部分備份與還原
操作前說明:
xtrabackup可以使用部分備份,但是只能在一個表一個文件(獨立表空間)的狀況下才能使用,設置mysql選項:innodb_file_per_table。
還原部分備份使用表導入的方式,而不是—copy-back選項。
盡管很多場景下可以通過直接復制文件的方式,但是會產生一致性問題不建議使用。
1 創建部分備份
部分備份有3個選項可以使用:
--include:設置正則表達式的格式,匹配的就備份
--table-file:在文件中指定要備份的表,然后通過這個選項傳入文件
--database:指定數據庫列表
使用include方式
include 方式數據庫名也可以匹配:
$ innobackupex --include='^mydatabase[.]mytable' /path/to/backup
這個選項是傳給xtrabackup –tables,所有的數據庫目錄都會被創建,但是里面可能是空的。
使用tables-file方式
如:
$ echo "mydatabase.mytable" > /tmp/tables.txt
$ innobackupex --tables-file=/tmp/tables.txt /path/to/backup
這個選項是應用xtrabackup –tablefile,只有匹配到表的數據庫目錄才會被創建
使用database方式
innobackupex可以傳遞用空格隔開的數組,格式為:databasename[.tablename]
$ innobackupex --databases="mydatabase.mytable mysql" /path/to/backup
注意:--databases選項只會對非innodb引擎表和frm文件產生影響,對於innodb數據文件總是備份的