利用Xtrabackup工具備份及恢復(fù)(MySQL DBA的必備工具)
Xtrabackup------MySQL DBA的必備工具
注意:
1)文檔參照http://www.percona.com/docs/wiki/percona-xtrabackup:start
2)mysql要使用5.1.50版本或以上。
一、Xtrabackup簡(jiǎn)介及安裝
1、Xtrabackup 是percona的一個(gè)開(kāi)源項(xiàng)目,可以熱備份innodb ,XtraDB,和MyISAM(會(huì)鎖表),可以看做是InnoDB Hotbackup的免費(fèi)替代品。
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,最簡(jiǎn)單的安裝方式是使用RPM包,不過(guò)想使用源代碼方式安裝的話(huà),其安裝方式有點(diǎn)古怪,因?yàn)樗捎玫脑贛ySQL源代碼上打補(bǔ)丁構(gòu)建的方式安裝的。
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
進(jìn)行到這里時(shí),千萬(wàn)別make install,那樣就會(huì)接著安裝MySQL了,正確方法是:
cd innobase/xtrabackup/
make
make install
安裝參照:http://www.percona.com/docs/wiki/percona-xtrabackup:installation:from-source
3、如此一來(lái),就會(huì)在/usr/bin目錄里安裝上兩個(gè)有用的工具:xtrabackup、innobackupex
1)xtrabackup 只能備份InnoDB和XtraDB兩種數(shù)據(jù)表,支持在線(xiàn)熱備份,可以在不加鎖的情況下備份Innodb數(shù)據(jù)表,不過(guò)此工具不能操作Myisam引擎表
2)innobackupex 是一個(gè)腳本封裝,封裝了xtrabackup,能同時(shí)處理Innodb和Myisam,但在處理Myisam時(shí)需要加一個(gè)讀鎖。
按如上的介紹,由于操作Myisam時(shí)需要加讀鎖,這會(huì)堵塞線(xiàn)上服務(wù)的寫(xiě)操作,而Innodb沒(méi)有這樣的限制,所以數(shù)據(jù)庫(kù)中Innodb表類(lèi)型所占的比例越大,則越有利。實(shí)際應(yīng)用中一般是直接使用innobackupex方法,它主要有三種操作方式,按手冊(cè)中的介紹:
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
——————————————————————————————————
第一個(gè)命令行是熱備份mysql數(shù)據(jù)庫(kù)。
帶有--apply-log選項(xiàng)的命令是準(zhǔn)備在一個(gè)備份上啟動(dòng)mysql服務(wù)。
帶有--copy-back選項(xiàng)的命令從備份目錄拷貝數(shù)據(jù),索引,日志到my.cnf文件里規(guī)定的初始位置。
Xtrabackup還可以用來(lái)moving InnoDB tables between servers,更多的內(nèi)容可以參考官方文檔及例子。
參考鏈接:
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會(huì)根據(jù)/et/my.cnf來(lái)確定MySQL的數(shù)據(jù)位置。
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,是將備份過(guò)程中的輸出信息重定向到1.log
innobackupex-1.5.1 –slave-info …..
–slave-info會(huì)記錄復(fù)制主日志的 復(fù)制點(diǎn),便于重新做復(fù)制用。(用在備份從機(jī)器用)
備份后的文件:
xtrabackup_binlog_info — 存放binlog的信息。(binlog需要另外拷貝備份,如果需要binlog的話(huà))
xtrabackup_checkpoints — 存放備份的起始位置和結(jié)束位置。
恢復(fù):
首先停掉數(shù)據(jù)庫(kù),然后刪除數(shù)據(jù)庫(kù)目錄下的所有數(shù)據(jù)庫(kù)文件.
cd /data/mysql_data
rm -rf * # 刪除數(shù)據(jù)目錄里的所有文件
innobackupex-1.5.1 --user=root --apply-log /data/back_data/2010-10-26_16-09-37 # 應(yīng)用日志
innobackupex-1.5.1 --user=root --copy-back /data/back_data/2010-10-26_16-09-37
默認(rèn)innobackupex-1.5.1會(huì)將二進(jìn)制日志信息存放在文件xtrabackup_binlog_info中發(fā)(方便做Slave)。
cd /data
chown -R mysql:mysql mysql_data/
重啟mysql服務(wù)
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
準(zhǔn)備還原
# innobackupex-1.5.1 --user=xxx [--password=xxx]--apply-log /data/back_data/
……
innobackupex: completed OK!
刪除數(shù)據(jù)目錄里的所有文件
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服務(wù)
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的標(biāo)準(zhǔn)輸入?;謴?fù),只需要使用tar -izxvf 解壓對(duì)應(yīng)的文件后,操作完全同普通備份。
還原:
使用tar –izxvf 解壓對(duì)應(yīng)的文件后,操作完全同普通備份。
#cd /data/back_data/2/
#tar ixvf 2.tar
# ls
backup-my.cnf ibdata1 ibdata2 mablevi mysql xtrabackup_binlog_info xtrabackup_checkpoints xtrabackup_logfile
準(zhǔn)備還原:
# innobackupex-1.5.1 --user=xxx [--password=xxx] --apply-log /data/back_data/2/
……
innobackupex: completed OK!
刪除數(shù)據(jù)目錄里的所有文件
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服務(wù)
———————————————————————————————————————
xtrabackup 備份和恢復(fù)
備份:
xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/data/back_data/
恢復(fù):
需要執(zhí)行兩次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只備份數(shù)據(jù)文件,并不備份數(shù)據(jù)表結(jié)構(gòu)(.frm),所以使用xtrabackup恢復(fù)的時(shí)候,你必須有對(duì)應(yīng)表結(jié)構(gòu)文件(.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/
在增量備份的目錄下,數(shù)據(jù)文件都是以.delta結(jié)尾的。增量備份只備份上一次全量備份后被修改過(guò)的page,所以增量備份只暫用較少的空間。增量備份可以在增量備份的基礎(chǔ)上增量。
增量備份恢復(fù):
我們需要分別對(duì)全量、增量備份各做一次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/下的數(shù)據(jù)文件就可以直接放到你的MySQL數(shù)據(jù)目錄下,恢復(fù)數(shù)據(jù)了。
再次提醒,xtrabackup只備份InnoDB數(shù)據(jù)文件,表結(jié)構(gòu)是不備份的,所以恢復(fù)的時(shí)候,你必須有對(duì)應(yīng)表結(jié)構(gòu)文件(.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 相結(jié)合
首先,innobackupex全備份:
innobackupex --user=root /data/back_data/ 2>/data/back_data/1.log #會(huì)生成一個(gè)時(shí)間文件夾,這里假如是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
恢復(fù):
首先停掉數(shù)據(jù)庫(kù),備份二進(jìn)制日志(如果有的話(huà)),然后刪除數(shù)據(jù)庫(kù)目錄下的所有數(shù)據(jù)庫(kù)文件.
cd /data/mysql_data
rm -rf * # 刪除數(shù)據(jù)目錄里的所有文件
恢復(fù)全量備份:
innobackupex --user=root --apply-log /data/back_data/2010-10-29_15-57-44 # 應(yīng)用日志
innobackupex --user=root --copy-back /data/back_data/2010-10-29_15-57-44 # 拷貝文件
恢復(fù)增量備份:
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服務(wù)。
- 安裝使用Percona XtraBackup來(lái)備份恢復(fù)MySQL的教程
- MySQL中使用innobackupex、xtrabackup進(jìn)行大數(shù)據(jù)的備份和還原教程
- 編寫(xiě)腳本令Xtrabackup對(duì)MySQL數(shù)據(jù)進(jìn)行備份的教程
- mysql中xtrabackup全量備份/增量備份及恢復(fù)
- mysql xtrabackup 備份恢復(fù)實(shí)現(xiàn)分享
- MySQL數(shù)據(jù)xtrabackup物理備份的方式
- xtrabackup備份還原MySQL數(shù)據(jù)庫(kù)
- MySQL xtrabackup 物理備份原理解析
- 使用xtrabackup實(shí)現(xiàn)mysql備份
- MySQL使用Xtrabackup備份流程詳解
- MySQL物理備份之Percona XtraBackup的實(shí)現(xiàn)示例
相關(guān)文章
MySQL主從復(fù)制的原理圖解及Java語(yǔ)言示例使用
這篇文章主要介紹了MySQL的主從復(fù)制原理詳細(xì)分析,讀寫(xiě)分離是基于主從復(fù)制來(lái)實(shí)現(xiàn)的。文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08
mysql 5.7.17 安裝配置方法圖文教程(ubuntu 16.04)
這篇文章主要為大家分享了ubuntu 16.04下mysql 5.7.17 安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01
SQL使用聚集函數(shù)實(shí)現(xiàn)對(duì)數(shù)據(jù)匯總
這篇文章主要介紹了SQL使用聚集函數(shù)實(shí)現(xiàn)對(duì)數(shù)據(jù)匯總,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09
mysql5.7單實(shí)例自啟動(dòng)服務(wù)配置過(guò)程
這篇文章主要介紹了mysql5.7單實(shí)例自啟動(dòng)服務(wù)配置的過(guò)程,附含配置源碼,有需要的朋友可以借鑒參考下,希望可以有所幫助,感謝閱讀2021-09-09
MySQL?讀寫(xiě)分離的實(shí)現(xiàn)邏輯及步驟詳解
文章介紹了MySQL讀寫(xiě)分離的架構(gòu)、實(shí)現(xiàn)步驟、可能遇到的問(wèn)題及解決方案,并總結(jié)了優(yōu)化點(diǎn),以提高M(jìn)ySQL數(shù)據(jù)庫(kù)的性能和可擴(kuò)展性,感興趣的朋友一起看看吧2025-02-02
MySQL執(zhí)行SQL文件的常見(jiàn)場(chǎng)景與方法
MySQL?作為世界上最流行的開(kāi)源關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),在日常開(kāi)發(fā)和運(yùn)維工作中扮演著重要角色,本文主要介紹了MySQL?執(zhí)行?SQL?文件的主要方法與場(chǎng)景,希望對(duì)大家有所幫助2025-06-06
通過(guò)SQL語(yǔ)句來(lái)備份,還原數(shù)據(jù)庫(kù)
這里僅僅用到了一種方式而已,把數(shù)據(jù)庫(kù)文件備份到磁盤(pán)然后在恢復(fù).2010-02-02

