利用Xtrabackup工具備份及恢復

火星人 @ 2014-03-09 , reply:0
←手機掃碼閱讀

Xtrabackup------MySQL DBA的必備工具 注意: 1)文檔參照http://www.percona.com/docs/wiki/percona-xtrabackup:start 2)mysql要使用5.1.50版本或以上. 一、Xtrabackup簡介及安裝 1、Xtrabackup 是percona的一個開源項目,可以熱備份innodb ,XtraDB,和MyISAM(會鎖表),可以看做是InnoDB Hotbackup的免費替代品. Percona Support for MySQL
Benefit Silver
(Per Server)
Gold
(Unlimited)
Platinum
(Unlimited)
Annual Price $1,500/server From $15,000 From $30,000
Number of Servers Covered Per-Server Unlimited Unlimited
Number of Support Incidents Unlimited Unlimited Unlimited
Response Time SLA 60 Minutes 30 Minutes 30 Minutes
Named Support Contact Persons 5 10 20
Email, Web, & Chat Support
Phone Support
Login Support
24×7 Support
Fixes For Verified Bugs
Hot Bug Fixes
Onsite System Audit Option
Covers Old Server Versions
Covers Non-Standard Platforms Option
Covers Custom Code Option

參考:http://www.percona.com/mysql-support/ 先看看如何安裝Xtrabackup,最簡單的安裝方式是使用RPM包,不過想使用源代碼方式安裝的話,其安裝方式有點古怪,因為它採用的在MySQL源代碼上打補丁構建的方式安裝的. 2、安裝: wget http://www.percona.com/downloads/XtraBackup/XtraBackup-1.4/Linux/binary/i686/ tar zxf xtrabackup-1.4.tar.gz cd xtrabackup-1.4 ./configure make 進行到這裡時,千萬別make install,那樣就會接著安裝MySQL了,正確方法是: cd innobase/xtrabackup/ make make install 安裝參照:http://www.percona.com/docs/wiki/percona-xtrabackup:installation:from-source

3、如此一來,就會在/usr/bin目錄里安裝上兩個有用的工具:xtrabackup、innobackupex 1)xtrabackup 只能備份InnoDB和XtraDB兩種數據表,支持在線熱備份,可以在不加鎖的情況下備份Innodb數據表,不過此工具不能操作Myisam引擎表 2)innobackupex 是一個腳本封裝,封裝了xtrabackup,能同時處理Innodb和Myisam,但在處理Myisam時需要加一個讀鎖. 按如上的介紹,操作Myisam時需要加讀鎖,這會堵塞線上服務的寫操作,而Innodb沒有這樣的限制,資料庫中Innodb表類型所佔的比例越大,則越有利.實際應用中一般是直接使用innobackupex方法,它主要有三種操作方式,按手冊中的介紹:
Usage: innobackup [--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 innobackup --apply-log [--use-memory=MB] [--uncompress] [--defaults-file=MY.CNF] [--ibbackup=IBBACKUP-BINARY] BACKUP-DIR innobackup --copy-back [--defaults-file=MY.CNF] BACKUP-DIR —————————————————————————————————— 第一個命令行是熱備份mysql資料庫. 帶有--apply-log選項的命令是準備在一個備份上啟動mysql服務. 帶有--copy-back選項的命令從備份目錄拷貝數據,索引,日誌到my.cnf文件里規定的初始位置. Xtrabackup還可以用來moving InnoDB tables between servers,更多的內容可以參考官方文檔及例子.


參考鏈接: 1.官方文檔:http://www.percona.com/docs/wiki/percona-xtrabackup:xtrabackup_manual 2.Xtrabackup online backup for InnoDB/XTraDB(pdf): http://www.percona.com/ppc2009/PPC2009_xtrabackup.pdf 二、innobackupex 和 xtrabackup備份詳解 註:innobackupex會根據/et/my.cnf來確定MySQL的數據位置. 1.普通備份: innobackupex [--defaults-file=/etc/my.cnf] –user=root [--host=192.168.1.52] [--password=xxx] [--port=3306] /data/back_data/ 2>/data/back_data/1.log
備份的目錄是/data/back_data/,這裡的2>/data/back_data/1.log,是將備份過程中的輸出信息重定向到1.log
innobackupex-1.5.1 –slave-info ….. –slave-info會記錄複製主日誌的 複製點,便於重新做複製用.(用在備份從機器用)


備份后的文件: xtrabackup_binlog_info — 存放binlog的信息.(binlog需要另外拷貝備份,如果需要binlog的話) xtrabackup_checkpoints — 存放備份的起始位置和結束位置.
恢復: 停掉資料庫,然後刪除資料庫目錄下的所有資料庫文件. cd /data/mysql_data rm -rf * # 刪除數據目錄里的所有文件
innobackupex-1.5.1 –user=root –apply-log /data/back_data/2010-10-26_16-09-37 # 應用日誌 innobackupex-1.5.1 –user=root –copy-back /data/back_data/2010-10-26_16-09-37
默認innobackupex-1.5.1會將二進位日誌信息存放在文件xtrabackup_binlog_info中發(方便做Slave). cd /data

chown -R mysql:mysql mysql_data/ 重啟mysql服務
2.打包(Tar)備份: innobackupex-1.5.1 –user=root [--password=xxx] –stream=tar /data/back_data/2/ 2>/data/back_data/2.log 1>/data/back_data/2.tar
還原: #cd /data/back_data/2/ #tar ixvf 2.tar # ls 2.tar backup-my.cnf ibdata1 ibdata2 mablevi mysql xtrabackup_binlog_info xtrabackup_checkpoints xtrabackup_logfile 準備還原 # innobackupex-1.5.1 –user=xxx [--password=xxx] –apply-log /data/back_data/ …… innobackupex: completed OK!


刪除數據目錄里的所有文件 rm -rf /data/mysql_data/* 拷貝: # innobackupex-1.5.1 –user=xxx [--password=xxx] –copy-back /data/back_data/ …… innobackupex: completed OK!
cd /data chown -R mysql:mysql mysql_data/ 重啟mysql服務
3. 壓縮(tar gzip)備份 innobackupex-1.5.1 –user=root [--password=xxx] –stream=tar /data/back_data/2/ 2>/data/back_data/2.log | gzip > /data/back_data/2.tar.gz 這裡使用了管道|將innobackupex-1.5.1作為gzip的標準輸入.恢復,只需要使用tar -izxvf 解壓對應的文件后,操作

完全同普通備份.
還原: 使用tar –izxvf 解壓對應的文件后,操作完全同普通備份. #cd /data/back_data/2/ #tar ixvf 2.tar # ls backup-my.cnf ibdata1 ibdata2 mablevi mysql xtrabackup_binlog_info xtrabackup_checkpoints xtrabackup_logfile 準備還原: # innobackupex-1.5.1 –user=xxx [--password=xxx] –apply-log /data/back_data/2/ …… innobackupex: completed OK!
刪除數據目錄里的所有文件 rm -rf /data/mysql_data/*

# innobackupex-1.5.1 –user=xxx [--password=xxx] –copy-back /data/back_data/2/
cd /data chown -R mysql:mysql mysql_data/ 重啟mysql服務
——————————————————————————————————————— xtrabackup 備份和恢復
備份: xtrabackup –defaults-file=/etc/my.cnf –backup –target-dir=/data/back_data/
恢復: 需要執行兩次xtrabackup –prepare xtrabackup –defaults-file=/etc/my.cnf –prepare –target-dir=/data/back_data/

xtrabackup –defaults-file=/etc/my.cnf –prepare –target-dir=/data/back_data/
注意,xtrabackup只備份數據文件,並不備份數據表結構(.frm),使用xtrabackup恢復的時候,你有對應表結構文件(.frm).
增量備份: 1. 全量備份 xtrabackup –defaults-file=/etc/my.cnf –backup –target-dir=/data/back_data/ 2. 增量備份 xtrabackup –defaults-file=/etc/my.cnf –backup –target-dir=/data/back_data_inc/ –incremental- basedir=/data/back_data/ 在增量備份的目錄下,數據文件都是以.delta結尾的.增量備份只備份上一次全量備份后被修改過的page,增量備份只暫用較少的空間.增量備份可以在增量備份的基礎上增量.


增量備份恢復: 我們需要分別對全量、增量備份各做一次prepare操作. xtrabackup –defaults-file=/etc/my.cnf –prepare –target-dir=/data/back_data/2010-10-26_16-09-37 xtrabackup –prepare –target-dir=/data/back_data/2010-10-26_16-09-37 –incremental-
dir=/data/back_data_inc xtrabackup –prepare –target-dir=/data/back_data/ #這一步不是 這樣,/data/back_data/下的數據文件就可以直接放到你的MySQL數據目錄下,恢複數據了. 再次提醒,xtrabackup只備份InnoDB數據文件,表結構是不備份的,恢復的時候,你有對應表結構文件(.frm).
rm -rf /data/mysql_data/ib*
cp -i /data/back_data/2010-10-26_16-09-37/ib* /data/mysql_data/


cd /data chown -R mysql:mysql mysql_data/
2.innobackupex 與 xtrabackup 相結合
,innobackupex全備份: innobackupex –user=root /data/back_data/ 2>/data/back_data/1.log #會生成一個時間文件夾,這裡假如是2010-10-29_15-57-44 然後,xtrabackup 做增量備份: xtrabackup –defaults-file=/etc/my.cnf –backup –target-dir=/data/back_data_inc/4 –incremental-basedir=/data/back_data/2010-10-29_15-57-44
恢復: 停掉資料庫,備份二進位日誌(如果有的話),然後刪除資料庫目錄下的所有資料庫文件.

cd /data/mysql_data rm -rf * # 刪除數據目錄里的所有文件
恢復全量備份: innobackupex –user=root –apply-log /data/back_data/2010-10-29_15-57-44 # 應用日誌 innobackupex –user=root –copy-back /data/back_data/2010-10-29_15-57-44 # 拷貝文件 恢復增量備份: xtrabackup –prepare –target-dir=/data/back_data/2010-10-29_15-57-44 –incremental-dir=/data/back_data_inc/5
cd /data chown -R mysql:mysql mysql_data/
重啟mysql服務. 另外,可以參考: http://www.gaojinbo.com/mysql-dba首選備份工具xtrabackup安裝配置v1-1.html

本文出自 「NEGIUP」 博客,請務必保留此出處http://negiup.blog.51cto.com/2348622/517035





[火星人 via ] 利用Xtrabackup工具備份及恢復已經有439次圍觀

http://www.coctec.com/docs/linux/show-post-49137.html