使用innobackupex備份mysql數據庫


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數據文件總是備份的


 


 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM