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安裝:數據庫
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
二、下載二進制源碼包:
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配置文件:(多實例時備份必需要)
注:文本測試中沒有多實例,使用默認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備份
在實施備份時,須要在數據庫運行的狀況下在線執行,並先提早創建用於備份的路徑。
參數:
/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)、完整數據備份
例如:
全量備份:
將在/www/backup/ 目錄下產生一個按當前日期時間命令的目錄,如 2012-07-18_15-05-06,在恢復時,注意要先關閉服務器,而且將 datadir 的目錄先清空,在恢復數據後必定須要重置該目錄的權限。
模擬故障,具體操做以下:
/usr/local/mysql5/bin/mysqladmin -uroot shutdown
mv /www/mysqldata /tmp/
mkdir /www/mysqldata
應用全量備份:
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 &
提示,能夠在備份時直接壓縮以節約磁盤空間:
不過注意解壓須要手動進行,並加入 -i 的參數,不然沒法解壓出全部文件。
(2)Innobackupex針對某個庫增量備份:
增量備份僅針對InnoDB這類支持事務的引擎,對於MyISAM等引擎,則仍然是全備了。
全量備份:
登陸到數據庫,建立幾個新的對象:
完整備份目錄上作第一次增量備份
若是默認存儲引擎是基於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
將完整備份中的數據恢復到數據庫中
第一個增量備份應用到完整備份
在完整備份目錄下會看到一個新增文件:
通過分析,原來是在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」不然不成功)。
執行兩次:
將數據庫停掉,刪除數據庫下的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」不然不成功。
作增量前固然要先進行全量備份,在全量的基礎上來進行增量。
首先進行全量備份。
在全量備份的基礎上進行增量。
(注:/www/inc/1/是每次都需修改的。好比第二次增量就改爲/www/inc/ 2,固然能夠寫個腳本進行自動備份,備份腳本將陸續奉上......恢復的時候也是同樣)
增量恢復。(步驟同全量恢復,只是在執行恢復命令的時候中間多一步)
將數據庫停掉,刪除數據庫下 /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全備份:
#會生成一個時間文件夾,這裏假如是2012-7-20_15-57-44
而後,xtrabackup 作增量備份:
恢復:
首先停掉數據庫,備份二進制日誌(若是有的話),而後刪除數據庫目錄下的全部數據庫文件.
cd /www/mysqldata
rm -rf * # 刪除數據目錄裏的全部文件
恢復全量備份:
恢復增量備份:
將/www/backup/目錄下的ib*文件拷貝到數據庫目錄
重啓mysql服務。
轉載:http://blog.chinaunix.net/uid-25266990-id-3314699.html