Mysql備份工具xtraback全量和增量測試

Mysql備份工具xtraback全量和增量測試css

 

xtrabackup 是 percona 的一個開源項目,能夠熱備份innodb ,XtraDB,和MyISAM(會鎖表)html

 

官方網址http://www.percona.com/docs/wiki/percona-xtrabackup:startnode

 

    Xtrabackup是由percona開發的一個開源軟件,此軟件能夠說是innodb熱備工具ibbackup的一個開源替代品。這個軟件是由2個部分組成的:xtrabackup和innobackupex。Xtrabackup專門用於innodb引擎和 xtraDB引擎;而innobackupex是專門用於myisam和innodb引擎,及混合使用的引擎。mysql

1、安裝sql

一、RPM安裝:數據庫

wget  http://www.percona.com/redir/downloads/XtraBackup/XtraBackup-2.0.0/RPM/rhel5/x86_64/percona-xtrabackup-debuginfo-2.0.0-417.rhel5.x86_64.rpm服務器

rpm -ivh –nodeps percona-xtrabackup-debuginfo-2.0.0-417.rhel5.x86_64.rpmapp

–nodeps(不檢查軟件間的依賴關係),由於安裝xtrabackup須要mysql_client,可是個人是經過源碼安裝的。因此環境變量要設置正確dom

好比 export PATH=$PATH:/usr/local/mysql/bin 若是mysql沒有設置到PATH裏 會報錯。socket

二、下載二進制源碼包:

wget http://www.percona.com/redir/downloads/XtraBackup/XtraBackup-2.0.0/binary/Linux/x86_64/percona-xtrabackup-2.0.0.tar.gz

tar -zxvf percona-xtrabackup-2.0.0.tar.gz

mv  percona-xtrabackup-2.0.0  /usr/loca/xtrabackup

三、使用源代碼方式安裝

若是你想使用源代碼方式安裝的話,則會發現 其安裝方式有點古怪,這是由於它採用的在MySQL源代碼上打補丁構建的方式。

tar zxf xtrabackup-0.8.tar.gz
cd xtrabackup-0.8
./configure
make
進行到這裏時,千萬別慣性使然接着make install,那樣就會接着安裝MySQL了,正確方法是接着:
cd innobase/xtrabackup/
make
make install

查看版本號:

mysqld配置文件:(多實例時備份必需要)

  1. [mysqld]
  2. innodb_data_home_dir = /www/mysqldata/ibdata #用來儲存文件的數據
  3. innodb_log_group_home_dir = /www/mysqldata/iblogs
  4. innodb_data_file_path=ibdata1:10M;ibdata2:10M:autoextend
  5. innodb_log_files_in_group = 2
  6. innodb_log_file_size = 1G

注:文本測試中沒有多實例,使用默認my.cnf。

 

2、xtrabackup備份和恢復

 

    Xtrabackup有兩個主要的工具:xtrabackup、innobackupex。    xtrabackup只能備份InnoDB和XtraDB兩種數據表,支持在線熱備份,不會鎖表innobackupex則封裝了xtrabackup,同時能夠備份MyISAM數據表,若是你的數據庫裏有innodb和myisam存儲引擎,只能使用innobackupex備份。
* xtrabackup - 用於熱備份innodb, xtradb表的工具,不能備份其餘表。 
* innobackupex - 對xtrabackup封裝的perl腳本,提供了myisam表備份的能力。(能進行整庫和數據表備份)。本文旨在介紹Xtrabackup工具對數據庫進行增量備份實踐。

一、innobackupex-1.5.1備份

 

在實施備份時,須要在數據庫運行的狀況下在線執行,並先提早創建用於備份的路徑。

  1. innobackupex [--defaults-file=/etc/my.cnf] –user=root [--host=192.168.10.198] [--password=xxx] [--port=3306] /www/backup/ 2>/www/backup/backup.log

參數:

/www/backup/   #備份的目錄

2>/www/backup/backup.log   #將備份過程當中的輸出信息重定向到/www/backup/backup.log

–slave-info  #會記錄複製主日誌的複製點,便於從新作複製用。(用在備份從機器用)

xtrabackup_binlog_info  #存放binlog的信息。(binlog須要另外拷貝備份,若是須要binlog的話)

xtrabackup_checkpoints   #存放備份的起始位置和結束位置。

–-stream=tar  #告訴xtrabackup,備份須要以tar的文件流方式輸出。

–-include='test'  #備份包含的庫表,如例:意思是要備份test庫中全部的表。若是須要全備份,則省略這個參數;若是須要備份test庫下的2個表:tableA & tableB,則寫成:–-include='test.tableA|test.tableB';再若是test庫下只有2個前綴是 table的表,你還能夠寫成:–-include='test.table*'。

–-throttle=500   #xtrabackup在備份過程當中,IO操做比較多,所以須要限定一下IO操做。以避免服務器壓力過大,不過好像做用不太明顯,也不知道是否是設置的仍是過大。待測…

–-socket=/data/mysql/backup/mysql.sock  #指定mysql.sock所在位置,以便備份進程登陸mysql

--apply-log

--redo-only

 

(1)、完整數據備份

例如:

  1. mysql> show databases; 
  2. +--------------------+
  3. | Database |
  4. +--------------------+
  5. | information_schema |
  6. | jss |
  7. | my_db |
  8. | mysql |
  9. | test |
  10. +--------------------+
  11. 5 rows in set (0.00 sec)

全量備份:

  1. innobackupex --defaults-file=/etc/my.cnf /www/backup/

將在/www/backup/  目錄下產生一個按當前日期時間命令的目錄,如 2012-07-18_15-05-06,在恢復時,注意要先關閉服務器,而且將 datadir 的目錄先清空,在恢復數據後必定須要重置該目錄的權限。

模擬故障,具體操做以下:

/usr/local/mysql5/bin/mysqladmin  -uroot shutdown

mv /www/mysqldata  /tmp/

mkdir /www/mysqldata

應用全量備份:

  1. innobackupex --apply-log /www/backup/2012-07-18_15-05-06/

 

 

  1. innobackupex --copy-back /www/backup/2012-07-18_15-05-06/

 

ln -s /usr/local/mysql5/share/english  /www/mysqldata/mysql/english  #恢復初始目錄樹,不然沒法啓動

chown -R mysql.mysql /www/mysqldata

/usr/local/mysql5/bin/mysqld_safe  --user=mysql &

 

提示,能夠在備份時直接壓縮以節約磁盤空間:

  1. innobackupex --defaults-file=/etc/my.cnf --stream=tar /www/backup/ | gzip > /www/backup/compress/mysql_backup.tar.gz

不過注意解壓須要手動進行,並加入 -i 的參數,不然沒法解壓出全部文件。

  1. tar zxfi /www/backup/compress/mysql_backup.tar.gz
  2. innobackupex --apply-log /www/backup/compress
  3. innobackupex --copy-back /www/backup/compress

(2)Innobackupex針對某個庫增量備份:

 

    增量備份僅針對InnoDB這類支持事務的引擎,對於MyISAM等引擎,則仍然是全備了。

全量備份:

  1. innobackupex-1.5.1 --defaults-file=/etc/my.cnf --databases="jss" /www/backup/full/

 

登陸到數據庫,建立幾個新的對象:

  1. mysql> use jss;
  2. Database changed
  3. mysql> show tables;
  4. +---------------+
  5. | Tables_in_jss |
  6. +---------------+
  7. | j1 |
  8. +---------------+
  9. 1 row in set (0.00 sec)
  10. mysql> truncate table j1;
  11. Query OK, 0 rows affected (0.01 sec)
  12. mysql> create table ja(id int);
  13. Query OK, 0 rows affected (0.04 sec)
  14. mysql> insert into ja values (1);
  15. Query OK, 1 row affected (0.01 sec)

完整備份目錄上作第一次增量備份

  1. innobackupex-1.5.1 --defaults-file=/etc/my.cnf --databases="jss" --incremental --incremental-basedir=/www/backup/full/2012-07-18_19-47-49/ /www/backup/inc


若是默認存儲引擎是基於MyISAM,那麼增量備份時備份的文件分別是.frm、.MYD、.MYI。

若是默認存儲引擎是基於InnoDB,那麼增量備份時備份的只會是.frm文件,個人配置文件所採用的是獨立表空間。

在 /www/backup/rec/下會產生增量文件:

[root@localhost jss]# cd /www/backup/inc/2012-07-18_19-55-17/

[root@localhost 2012-07-18_19-55-17]# ls -l

total 384

-rw-r--r-- 1 root root    250 Jul 18 19:55 backup-my.cnf

-rw-r----- 1 root root 360448 Jul 18 19:55 ibdata1.delta

-rw-r----- 1 root root     18 Jul 18 19:55 ibdata1.meta

drwxr-xr-x 2 root root   4096 Jul 18 19:55 jss

-rw-r--r-- 1 root root     13 Jul 18 19:55 xtrabackup_binary

-rw-r--r-- 1 root root     26 Jul 18 19:55 xtrabackup_binlog_info

-rw-r----- 1 root root     81 Jul 18 19:55 xtrabackup_checkpoints

-rw-r----- 1 root root   2560 Jul 18 19:55 xtrabackup_logfile.

[root@localhost 2012-07-18_19-55-17]# cd jss/

[root@localhost jss]# ls -l

total 28

-rw-r--r-- 1 mysql mysql   61 Jul 18 19:18 db.opt

-rw-r--r-- 1 mysql mysql 8556 Jul 18 19:18 j1.frm

-rw-rw---- 1 mysql mysql 8556 Jul 18 19:53 ja.frm


note:此過程僅影響XtraDB或基於InnoDB的表,其餘帶不一樣存儲引擎的表會在增量備份出現時被徹底複製

恢復過程也須要用到prepare
首先,提交事務必須從新執行每個備份
而後,未提交事務必須回退

模擬故障

rm -rf  /www/mysqldata/jss

將完整備份中的數據恢復到數據庫中

  1. innobackupex-1.5.1 --defaults-file=/etc/my.cnf --databases="jss" --apply-log /www/backup/full/2012-07-18_19-47-49/

 

第一個增量備份應用到完整備份

  1. innobackupex-1.5.1 --defaults-file=/etc/my.cnf --databases="jss" --apply-log /www/backup/full/2012-07-18_19-47-49/ --incremental-dir=/www/backup/inc/2012-07-18_19-55-17/

 

在完整備份目錄下會看到一個新增文件:

 

通過分析,原來是在prepare時,XtraBackup並無將增量備份集中,屬於新建對象的.frm文件複製到完整備份集目錄,所以在執行copy-back時,這部分文件天然也就沒有複製回數據文件路徑。只有手動還原到datadir。

拷貝到datadir目錄下

cp -rp  2012-07-18_19-47-48jss   /www/mysqldata/jss

進入datadir查看文件:

[root@localhost backup]# cd  /www/mysqldata

[root@localhost mysqldata]# ls

ibdata1  ib_logfile0  ib_logfile1  jss  my_db  mysql  test  xtrabackup_binlog_pos_innodb  xtrabackup_checkpoints

[root@localhost mysqldata]# chown  -R mysql.mysql /www/mysqldata

重啓mysql

 

 

二、xtrabackup備份詳解

 

xtrabackup只備份InnoDB數據文件,表結構是不備份的,因此恢復的時候,你必須有對應表結構文件(.frm)
 mysql
 use jss;
 alter table j1 engine=innodb;

(1)全量備份及恢復

(使用xtrabackup,僅限InnoDB和xtradb表,且注意mysql配置文件my.cnf中「default_table_type = InnoDB」不然不成功)。

  1. xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/www/backup/

執行兩次:

  1. xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/www/backup/
  2. xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/www/backup/

將數據庫停掉,刪除數據庫下的ib*(ib開頭的全部)文件。

將/www/backup/目錄下的ib*文件拷貝到數據庫目錄。

  設置權限:

#chown mysql:mysql ib*

重啓數據庫後測試,是否成功。

[root@localhost backup]# cp ib* /www/mysqldata/                                      

[root@localhost backup]# chown  mysql.mysql /www/mysqldata/ib*                       

[root@localhost backup]# /usr/local/mysql/bin/mysqld_safe  --user=mysql &

[1] 1695

[root@localhost backup]# 120719 15:56:19 mysqld_safe Logging to '/www/mysqldata/localhost.localdomain.err'.

120719 15:56:19 mysqld_safe Starting mysqld daemon with databases from /www/mysqldata

 

[root@localhost backup]# mysql

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 1

Server version: 5.1.57-log MySQL Community Server (GPL)

 

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

 

mysql> use jss;

Database changed

mysql> select * from j2;

+------+

| id   |

+------+

|    2 |

+------+

1 row in set (0.01 sec)

 

注意,xtrabackup只備份數據文件,並不備份數據表結構(.frm),因此使用xtrabackup恢復的時候,你必須有對應表結構文件(.frm)。

 

(2)增量備份及恢復

    再次強調,xtrabackup作增量僅限InnoDB和xtradb表,且注意mysql配置文件my.cnf中「default_table_type= InnoDB」不然不成功。

作增量前固然要先進行全量備份,在全量的基礎上來進行增量。

首先進行全量備份。

  1. xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/www/backup/

在全量備份的基礎上進行增量。

  1. xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/www/inc/1 --incremental-basedir=/www/backup/

(注:/www/inc/1/是每次都需修改的。好比第二次增量就改爲/www/inc/ 2,固然能夠寫個腳本進行自動備份,備份腳本將陸續奉上......恢復的時候也是同樣)

增量恢復。(步驟同全量恢復,只是在執行恢復命令的時候中間多一步)

  1. xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/www/backup/
  2. xtrabackup --target-dir=/www/backup/ --prepare --incremental-dir=/www/inc/1
  3. xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/www/backup/

  將數據庫停掉,刪除數據庫下 /www/mysqldata/ibdata 的ib*表文件。將/www/backup/目錄下的ib*文件拷貝到數據庫目錄/www/mysqldata/ibdata。

設置權限:

#chown mysql:mysql ib*

重啓後測試。是否成功。



注:備份前先登陸數據庫,打開一個表看看記錄條數,而後進行備份,而後再對錶最終的記錄進行修改,而後在備份,再測試。

 

3、innobackupex-1.5.1  xtrabackup 相結合

備份策略:

整庫備份直接用innobackupex-1.5.1腳本。

只對InnoDB或xtradb表,進行備份直接用xtrabackup。

    因爲xtrabackup不能備份表結構,因此備份時首先用innobackupex-1.5.1腳本對數據庫進行整庫備份。再用xtrabackup進 行表備份。分別進行。恢復時也分別進行恢復。若是發生表結構丟失則先使用innobackupex-1.5.1進行恢復,而後再用xtrabackup恢 復增量數據。用生成的文件ib*覆蓋用innobackupex-1.5.1恢復後的ib*文件。

=======================================================================================

首先,innobackupex-1.5.1全備份:

  1. innobackupex --defaults-file=/etc/my.cnf /www/backup/full/ 2> /www/backup//1.log

#會生成一個時間文件夾,這裏假如是2012-7-20_15-57-44

而後,xtrabackup 作增量備份:

  1. innobackupex-1.5.1--defaults-file=/etc/my.cnf --incremental --incremental-basedir=/www/backup/full/2012-7-20_15-57-44/ /www/backup/inc/1

恢復:

首先停掉數據庫,備份二進制日誌(若是有的話),而後刪除數據庫目錄下的全部數據庫文件.

cd /www/mysqldata

rm -rf * # 刪除數據目錄裏的全部文件

恢復全量備份:

  1. innobackupex-1.5.1 --apply-log /www/backup/full/2012-7-20_15-57-44/ # 應用日誌
  2. innobackupex-1.5.1 --copy-back /www/backup/full/2012-7-20_15-57-44/ # 拷貝文件

恢復增量備份:

  1. xtrabackup --prepare --target-dir=/www/backup/full/2012-7-20_15-57-44 --incremental-dir= /www/backup/inc/1

將/www/backup/目錄下的ib*文件拷貝到數據庫目錄

重啓mysql服務。

 

轉載:http://blog.chinaunix.net/uid-25266990-id-3314699.html

相關文章
相關標籤/搜索