Centos 推荐使用xtrabackup备份数据库
mysqldump是一種邏輯備份方式,將數(shù)據(jù)轉(zhuǎn)換成sql文件,其最大的缺陷就是備份和恢復(fù)時(shí)間很長(zhǎng),對(duì)于一個(gè)小于10G的數(shù)據(jù)庫(kù)而言,這個(gè)速度還是可以接受的,但是如果數(shù)據(jù)庫(kù)較大,那在使用mysqldump備份就非常不合適了。
lvm是一種采用邏輯卷快照功能對(duì)數(shù)據(jù)進(jìn)行備份,可以實(shí)現(xiàn)幾乎熱備,但是備份過程較為復(fù)雜(來回切換終端),很難用shell腳本直接實(shí)現(xiàn),不過現(xiàn)在似乎有個(gè)工具mylvmbackup可以實(shí)現(xiàn)自動(dòng)化備份,但是沒有嘗試過,改天我也試試。
Xtrabackup對(duì)MyISAM表只能實(shí)現(xiàn)溫備,并且不支持增量備份,所以每次對(duì)MyISAM表備份都是全備
XtraBackup更多高級(jí)特性通常只能在innodb存儲(chǔ)引擎上實(shí)現(xiàn),而且高級(jí)特性還都依賴于mysql數(shù)據(jù)庫(kù)對(duì)innodb引擎實(shí)現(xiàn)了單獨(dú)表空間,否則沒辦法實(shí)現(xiàn)單表或單庫(kù)導(dǎo)出
mysql>?show?global?variables?like?'%innodb_file_per_table%'; +-----------------------+-------+ |?Variable_name?????????|?Value?| +-----------------------+-------+ |?innodb_file_per_table?|?ON????| +-----------------------+-------+ 1?row?in?set?(0.00?sec)那么今天就和大家聊聊第三款開源備份工具xtrabackup:
官方站點(diǎn):http://www.percona.com
官方在線文檔:http://www.percona.com/doc/percona-xtrabackup/2.2/
最新軟件包下載地址:http://www.percona.com/downloads/XtraBackup/
一、簡(jiǎn)介
Xtrabackup是由percona提供的mysql數(shù)據(jù)庫(kù)開源熱備工具。特點(diǎn)如下:
????? (1)備份過程快速、可靠;
????? (2)備份過程不會(huì)打斷正在執(zhí)行的事務(wù);
????? (3)能夠基于壓縮等功能節(jié)約磁盤空間和流量;
????? (4)自動(dòng)實(shí)現(xiàn)備份檢驗(yàn);
? ? ? ?(5)還原速度快;
二、安裝
XtraBackup目前最新版為2.2.9,本篇博客采用yum安裝方式
1、yum安裝
# yum -y install libaio perl-Time-HiRes perl-DBD-MySQL perl-IO-Socket-SSL
# rpm -ivh https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.3.2/binary/redhat/6/x86_64/percona-xtrabackup-2.3.2-1.el6.x86_64.rpm
2、查看Xtrabackup安裝的工具
#?rpm?-ql?percona-xtrabackup?|grep?bin/usr/bin/innobackupex /usr/bin/xbcloud /usr/bin/xbcloud_osenv /usr/bin/xbcrypt /usr/bin/xbstream /usr/bin/xtrabackup3、XtraBackup中主要包含了三個(gè)工具
xbsteam:支持流式備份
xtrbackup:用于熱備innodb、xtradb表中數(shù)據(jù)的工具,不能備份其它類型的表,也不能備份數(shù)據(jù)表結(jié)構(gòu)
innobackupex:是將xtrabackup進(jìn)行封裝的perl腳本,提供了備份MyISAM表的能力
xbcrypt:用于加密或解密備份的數(shù)據(jù)庫(kù)
xbcloud:用于從云上上傳和下載全部或部分xbstream檔案
三、innobackupex幾個(gè)非常重要的參數(shù)
--apply-log
一般情況下,在備份完成后,數(shù)據(jù)尚且不能用于恢復(fù)操作,因?yàn)閭浞莸臄?shù)據(jù)中可能會(huì)包含尚未提交的事務(wù)或已經(jīng)提交但尚未同步至數(shù)據(jù)文件中的事務(wù)。因此,此時(shí)數(shù)據(jù)文件仍處理不一致狀態(tài)。“準(zhǔn)備”的主要作用正是通過回滾未提交的事務(wù)及同步已經(jīng)提交的事務(wù)至數(shù)據(jù)文件也使得數(shù)據(jù)文件處于一致性狀態(tài)。
--redo-only
準(zhǔn)備(prepare)增量備份與整理完全備份有著一些不同,尤其要注意的是:
(1)需要在每個(gè)備份(包括完全和各個(gè)增量備份)上,將已經(jīng)提交的事務(wù)進(jìn)行“重放”?!爸胤拧敝?#xff0c;所有的備份數(shù)據(jù)將合并到完全備份上。
(2)基于所有的備份將未提交的事務(wù)進(jìn)行“回滾”。
--copy-back
該選項(xiàng)用于執(zhí)行恢復(fù)(還原)操作,其通過復(fù)制所有數(shù)據(jù)相關(guān)的文件至mysql服務(wù)器DATADIR目錄中來執(zhí)行恢復(fù)過程。innobackupex通過backup-my.cnf來獲取DATADIR目錄的相關(guān)信息。
四、innobackup備份語法
完全備份+完全恢復(fù)
完全備份
#?innobackupex?--user=DBUSER?--password=DBUSERPASS?--defaults-file=/etc/mysql/my.cnf?/path/to/BACKUP-DIR/準(zhǔn)備一個(gè)完全備份
#?innobackupex?--apply-log??/path/to/BACKUP-DIR從一個(gè)完全備份中恢復(fù)數(shù)據(jù)
修改datadir目錄權(quán)限
#?chown?-R??mysql:mysql??/mydata/data/完全備份+增量備份+完全恢復(fù)
完全備份:
# innobackupex --user=DBUSER --password=DBUSERPASS? /path/to/BACKUP-DIR/
第一次增量備份
# innobackupex --user=DBUSER --password=DBUSERPASS --incremental /backup --incremental-basedir=BASEDIR
第二次增量備份
# innobackupex --user=DBUSER --password=DBUSERPASS --incremental /backup --incremental-basedir=BASEDIR
準(zhǔn)備:
執(zhí)行完全備份redo
# innobackupex --apply-log --redo-only BASE-DIR
執(zhí)行第一次增量備份redo
# innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1
執(zhí)行第二次增量備份redo
# innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-2
還原:
# innobackupex --copy-back BASE-DIR
解釋:
其中BASE-DIR指的是完全備份所在的目錄,
而INCREMENTAL-DIR-1指的是第一次增量備份的目錄,
INCREMENTAL-DIR-2指的是第二次增量備份的目錄,
其它依次類推,即如果有多次增量備份,每一次都要執(zhí)行如上操作;
五、以上兩種方式案列重放
完全備份+完全恢復(fù)
1、實(shí)驗(yàn)前的準(zhǔn)備工作
#?service?mysqld?stop #?rm?-rf?/mydata/data/*? #?/usr/local/mysql/scripts/mysql_install_db?--user=mysql?--datadir=/mydata/data/?--basedir=/usr/local/mysql/ #?service?mysqld?start #?mysqladmin?-uroot?-p?password?123456 #?mysql?-uroot?-p123456 mysql>?create?database?jiaowu; mysql>?use?jiaowu; mysql>?set?sql_log_bin?=?0; mysql>?source?/root/tutor.sql;????//導(dǎo)入tutor數(shù)據(jù)表 mysql>?set?sql_log_bin?=?1; mysql>?select?*?from?tutor; +------+---------------+--------+------+ |?TID??|?Tname?????????|?Gender?|?Age??| +------+---------------+--------+------+ |????1?|?ZhengYansheng?|?M??????|???25?| |????2?|?LiJian????????|?M??????|???26?| |????3?|?OuYangyu??????|?M??????|???27?| |????4?|?LuoChenghui???|?M??????|???25?| |????5?|?LiuYunbo??????|?M??????|???25?| |????6?|?FuJian????????|?M??????|???24?| |????7?|?LiMenglu??????|?F??????|???23?| |????8?|?BaoYintu??????|?M??????|???28?| |????9?|?WangYana??????|?F??????|???25?| +------+---------------+--------+------+ 9?rows?in?set?(0.00?sec)2、innobackupex對(duì)DB進(jìn)行完全備份
# innobackupex --user=root --password=123456 /backup/
如果執(zhí)行正確,其最后輸出的幾行信息通常如下:
innobackupex:?Backup?created?in?directory?'/backup/2015-03-18_21-00-17' innobackupex:?MySQL?binlog?position:?filename?'mysql-bin.000003',?position?332 150318?21:00:23??innobackupex:?Connection?to?database?server?closed 150318?21:00:23??innobackupex:?completed?OK!3、查看備份目錄和文件
#?ls?/backup/ 2015-03-18_21-00-17 #?ls?/backup/2015-03-18_21-00-17/ backup-my.cnf??jiaowu??performance_schema??xtrabackup_binlog_info??xtrabackup_info ibdata1????????mysql???test?xtrabackup_checkpoints??xtrabackup_logfile4、準(zhǔn)備一個(gè)完全備份
# innobackupex --user=root --password=123456 --apply-log /backup/2015-03-18_21-00-17/
#####模擬數(shù)據(jù)庫(kù)故障#####
5、這里還是采用老方法直接刪除所有的數(shù)據(jù)文件
# service mysqld stop
# rm -rf /mydata/data/*
6、從一個(gè)完全備份中恢復(fù)數(shù)據(jù)庫(kù)
# innobackupex --copy-back /backup/2015-03-18_21-00-17/
7、修改數(shù)據(jù)目錄權(quán)限
# chown -R mysql.mysql /mydata/data/
8、啟動(dòng)mysqld服務(wù)
# service mysqld start
9、登陸mysql查看是否是否一致
#?mysql?-e?'use?jiaowu;select?*?from?tutor;' +------+---------------+--------+------+ |?TID??|?Tname?????????|?Gender?|?Age??| +------+---------------+--------+------+ |????1?|?ZhengYansheng?|?M??????|???25?| |????2?|?LiJian????????|?M??????|???26?| |????3?|?OuYangyu??????|?M??????|???27?| |????4?|?LuoChenghui???|?M??????|???25?| |????5?|?LiuYunbo??????|?M??????|???25?| |????6?|?FuJian????????|?M??????|???24?| |????7?|?LiMenglu??????|?F??????|???23?| |????8?|?BaoYintu??????|?M??????|???28?| |????9?|?WangYana??????|?F??????|???25?| +------+---------------+--------+------+#數(shù)據(jù)已經(jīng)成功恢復(fù)到數(shù)據(jù)庫(kù)當(dāng)中
完全備份+增量備份+完全恢復(fù)
1、實(shí)驗(yàn)前的準(zhǔn)備工作
#?service?mysqld?stop #?rm?-rf?/mydata/data/*?????//刪除原來的備份文件 #?rm?-rf?/backup/* #?/usr/local/mysql/scripts/mysql_install_db?--user=mysql?--datadir=/mydata/data/?--basedir=/usr/local/mysql/ #?service?mysqld?start #?mysqladmin?-uroot?-p?password?123456 #?mysql?-uroot?-p123456 mysql>?create?database?jiaowu; mysql>?use?jiaowu; mysql>?set?sql_log_bin?=?0; mysql>?source?/root/tutor.sql;???//導(dǎo)入tutor數(shù)據(jù)表 mysql>?set?sql_log_bin?=?1; mysql>?select?*?from?tutor; +------+---------------+--------+------+ |?TID??|?Tname?????????|?Gender?|?Age??| +------+---------------+--------+------+ |????1?|?ZhengYansheng?|?M??????|???25?| |????2?|?LiJian????????|?M??????|???26?| |????3?|?OuYangyu??????|?M??????|???27?| |????4?|?LuoChenghui???|?M??????|???25?| |????5?|?LiuYunbo??????|?M??????|???25?| |????6?|?FuJian????????|?M??????|???24?| |????7?|?LiMenglu??????|?F??????|???23?| |????8?|?BaoYintu??????|?M??????|???28?| |????9?|?WangYana??????|?F??????|???25?| +------+---------------+--------+------+ 9?rows?in?set?(0.00?sec)2、innobackupex對(duì)DB進(jìn)行完全備份
# innobackupex --user=root --password=123456 /backup/
如果執(zhí)行正確,其最后輸出的幾行信息通常如下:
innobackupex: Backup created in directory '/backup/2015-03-18_21-14-49'
innobackupex: MySQL binlog position: filename 'mysql-bin.000003', position 332
150318 21:14:54? innobackupex: Connection to database server closed
150318 21:14:54? innobackupex: completed OK!
3、僅查看備份目錄
# ls /backup/
2015-03-18_21-14-49
4、操作數(shù)據(jù)庫(kù)并插入數(shù)據(jù)
#?mysql?jiaowu; mysql>?insert?into?tutor(TID)?values(11); mysql>?insert?into?tutor(TID)?values(12); mysql>?insert?into?tutor(TID)?values(13); mysql>?select?*?from?tutor; +------+---------------+--------+------+ |?TID??|?Tname?????????|?Gender?|?Age??| +------+---------------+--------+------+ |????1?|?ZhengYansheng?|?M??????|???25?| |????2?|?LiJian????????|?M??????|???26?| |????3?|?OuYangyu??????|?M??????|???27?| |????4?|?LuoChenghui???|?M??????|???25?| |????5?|?LiuYunbo??????|?M??????|???25?| |????6?|?FuJian????????|?M??????|???24?| |????7?|?LiMenglu??????|?F??????|???23?| |????8?|?BaoYintu??????|?M??????|???28?| |????9?|?WangYana??????|?F??????|???25?| |???11?|?NULL??????????|?NULL???|?NULL?| |???12?|?NULL??????????|?NULL???|?NULL?| |???13?|?NULL??????????|?NULL???|?NULL?| +------+---------------+--------+------+ 12?rows?in?set?(0.00?sec)5、執(zhí)行第一次增量備份并查看備份目錄
# innobackupex --user=root --password=123456 --incremental /backup/ --incremental-basedir=/backup/2015-03-18_21-14-49/
# ls /backup/
2015-03-18_21-14-49? 2015-03-18_21-18-45
6、再次操作數(shù)據(jù)庫(kù)并插入多條數(shù)據(jù)
#?mysql?jiaowu; mysql>?insert?into?tutor(TID)?values(21); mysql>?insert?into?tutor(TID)?values(22); mysql>?insert?into?tutor(TID)?values(23); mysql>?select?*?from?tutor; +------+---------------+--------+------+ |?TID??|?Tname?????????|?Gender?|?Age??| +------+---------------+--------+------+ |????1?|?ZhengYansheng?|?M??????|???25?| |????2?|?LiJian????????|?M??????|???26?| |????3?|?OuYangyu??????|?M??????|???27?| |????4?|?LuoChenghui???|?M??????|???25?| |????5?|?LiuYunbo??????|?M??????|???25?| |????6?|?FuJian????????|?M??????|???24?| |????7?|?LiMenglu??????|?F??????|???23?| |????8?|?BaoYintu??????|?M??????|???28?| |????9?|?WangYana??????|?F??????|???25?| |???11?|?NULL??????????|?NULL???|?NULL?| |???12?|?NULL??????????|?NULL???|?NULL?| |???13?|?NULL??????????|?NULL???|?NULL?| |???21?|?NULL??????????|?NULL???|?NULL?| |???22?|?NULL??????????|?NULL???|?NULL?| |???23?|?NULL??????????|?NULL???|?NULL?| +------+---------------+--------+------+ 15?rows?in?set?(0.00?sec)7、執(zhí)行第二次增量備份并查看備份文件
# innobackupex --user=root --password=123456 --incremental /backup/ --incremental-basedir=/backup/2015-03-18_21-18-45/
# ls /backup/
2015-03-18_21-14-49? 2015-03-18_21-18-45? 2015-03-18_21-22-31
解釋:
2015-03-18_21-14-49:為innobackupex的完全備份目錄
2015-03-18_21-18-45:為innobackupex的第一次增量備份目錄
2015-03-18_21-22-31:為innobackupex的第二次增量備份目錄
8、開始準(zhǔn)備innobackupex
首先執(zhí)行完全備份redo-only
# innobackupex --user=root --password=123456 --apply-log --redo-only /backup/2015-03-18_21-14-49/
執(zhí)行第一個(gè)增量備份redo-only
# innobackupex --user=root --password=123456 --apply-log --redo-only /backup/2015-03-18_21-14-49/ --incremental-dir=/backup/2015-03-18_21-18-45/
執(zhí)行第二個(gè)增量備份redo-only
# innobackupex --user=root --password=123456 --apply-log --redo-only /backup/2015-03-18_21-14-49/ --incremental-dir=/backup/2015-03-18_21-22-31/
#####模擬數(shù)據(jù)庫(kù)故障#####
9、這里還是采用老方法直接刪除所有的數(shù)據(jù)文件
# service mysqld stop
# rm -rf /mydata/data/*
10、從完全備份中恢復(fù)數(shù)據(jù)庫(kù)
# innobackupex --user=root --password=123456 --copy-back /backup/2015-03-18_21-14-49/
11、修改數(shù)據(jù)目錄權(quán)限
# chown -R mysql.mysql /mydata/data/
12、啟動(dòng)mysqld服務(wù)
# service mysqld start
13、登陸mysql查看是否是否一致
#?mysql?-e?'use?jiaowu;select?*?from?tutor;' +------+---------------+--------+------+ |?TID??|?Tname?????????|?Gender?|?Age??| +------+---------------+--------+------+ |????1?|?ZhengYansheng?|?M??????|???25?| |????2?|?LiJian????????|?M??????|???26?| |????3?|?OuYangyu??????|?M??????|???27?| |????4?|?LuoChenghui???|?M??????|???25?| |????5?|?LiuYunbo??????|?M??????|???25?| |????6?|?FuJian????????|?M??????|???24?| |????7?|?LiMenglu??????|?F??????|???23?| |????8?|?BaoYintu??????|?M??????|???28?| |????9?|?WangYana??????|?F??????|???25?| |???11?|?NULL??????????|?NULL???|?NULL?| |???12?|?NULL??????????|?NULL???|?NULL?| |???13?|?NULL??????????|?NULL???|?NULL?| |???21?|?NULL??????????|?NULL???|?NULL?| |???22?|?NULL??????????|?NULL???|?NULL?| |???23?|?NULL??????????|?NULL???|?NULL?| +------+---------------+--------+------+#兩次增量添加的數(shù)據(jù)也已經(jīng)成功添加到數(shù)據(jù)庫(kù)當(dāng)中。恢復(fù)成功
六、Xtrabackup的高級(jí)功能
流式壓縮功能
Xtrabackup對(duì)備份的數(shù)據(jù)文件支持“流”功能,即可以將備份的數(shù)據(jù)通過STDOUT傳輸給tar程序進(jìn)行歸檔,而不是默認(rèn)的直接保存至某備份目錄中。要使用此功能,僅需要使用--stream選項(xiàng)即可。如:
# innobackupex --user=root --password=123456 --stream=tar? /backup | gzip > /backup/`date +%F_%H-%M-%S`.tar.gz
甚至也可以使用類似如下命令將數(shù)據(jù)備份至其它服務(wù)器:強(qiáng)烈推薦這種方式
# innobackupex --user=root --password=123456 --stream=tar? /backup | ssh root@192.168.1.100? 'cat - > /backup/`date +%F_%H-%M-%S`.tar'
在執(zhí)行本地備份時(shí),還可以使用--parallel選項(xiàng)對(duì)多個(gè)文件進(jìn)行并行復(fù)制(暫時(shí)還沒有看懂此選項(xiàng))
此外,在執(zhí)行本地備份時(shí),還可以使用--parallel選項(xiàng)對(duì)多個(gè)文件進(jìn)行并行復(fù)制。此選項(xiàng)用于指定在復(fù)制時(shí)啟動(dòng)的線程數(shù)目。當(dāng)然,在實(shí)際進(jìn)行備份時(shí)要利用此功能的便利性,也需要啟用innodb_file_per_table選項(xiàng)或共享的表空間通過innodb_data_file_path選項(xiàng)存儲(chǔ)在多個(gè)ibdata文件中。對(duì)某一數(shù)據(jù)庫(kù)的多個(gè)文件的復(fù)制無法利用到此功能。其簡(jiǎn)單使用方法如下:
# innobackupex --parallel? /path/to/backup
同時(shí),innobackupex備份的數(shù)據(jù)文件也可以存儲(chǔ)至遠(yuǎn)程主機(jī),這可以使用--remote-host選項(xiàng)來實(shí)現(xiàn):
# innobackupex --remote-host=root@www.magedu.com? /path/IN/REMOTE/HOST/to/backup
七、使用Xtrabackup對(duì)數(shù)據(jù)庫(kù)進(jìn)行部分備份
Xtrabackup也可以實(shí)現(xiàn)部分備份,即只備份某個(gè)或某些指定的數(shù)據(jù)庫(kù)或某數(shù)據(jù)庫(kù)中的某個(gè)或某些表。但要使用此功能,必須啟用innodb_file_per_table選項(xiàng),即每張表保存為一個(gè)獨(dú)立的文件。同時(shí),其也不支持--stream選項(xiàng),即不支持將數(shù)據(jù)通過管道傳輸給其它程序進(jìn)行處理。
此外,還原部分備份跟還原全部數(shù)據(jù)的備份也有所不同,即你不能通過簡(jiǎn)單地將prepared的部分備份使用--copy-back選項(xiàng)直接復(fù)制回?cái)?shù)據(jù)目錄,而是要通過導(dǎo)入表的方向來實(shí)現(xiàn)還原。當(dāng)然,有些情況下,部分備份也可以直接通過--copy-back進(jìn)行還原,但這種方式還原而來的數(shù)據(jù)多數(shù)會(huì)產(chǎn)生數(shù)據(jù)不一致的問題,因此,無論如何不推薦使用這種方式。
(1)創(chuàng)建部分備份
創(chuàng)建部分備份的方式有三種:
正則表達(dá)式(--include)
枚舉表文件(--tables-file)
列出要備份的數(shù)據(jù)庫(kù)(--databases)。
(a)使用--include
使用--include時(shí),要求為其指定要備份的表的完整名稱,即形如databasename.tablename,如:
# innobackupex --include='^mageedu[.]tb1'? /path/to/backup
(b)使用--tables-file
此選項(xiàng)的參數(shù)需要是一個(gè)文件名,此文件中每行包含一個(gè)要備份的表的完整名稱;如:
# echo -e 'mageedu.tb1\nmageedu.tb2' > /tmp/tables.txt
# innobackupex --tables-file=/tmp/tables.txt? /path/to/backup
(c)使用--databases
此選項(xiàng)接受的參數(shù)為數(shù)據(jù)名,如果要指定多個(gè)數(shù)據(jù)庫(kù),彼此間需要以空格隔開;同時(shí),在指定某數(shù)據(jù)庫(kù)時(shí),也可以只指定其中的某張表。此外,此選項(xiàng)也可以接受一個(gè)文件為參數(shù),文件中每一行為一個(gè)要備份的對(duì)象。如:
# innobackupex --databases="mageedu testdb"? /path/to/backup
(2)整理(preparing)部分備份
prepare部分備份的過程類似于導(dǎo)出表的過程,要使用--export選項(xiàng)進(jìn)行:
# innobackupex --apply-log --export? /pat/to/partial/backup
此命令執(zhí)行過程中,innobackupex會(huì)調(diào)用xtrabackup命令從數(shù)據(jù)字典中移除缺失的表,因此,會(huì)顯示出許多關(guān)于“表不存在”類的警告信息。同時(shí),也會(huì)顯示出為備份文件中存在的表創(chuàng)建.exp文件的相關(guān)信息。
(3)還原部分備份
還原部分備份的過程跟導(dǎo)入表的過程相同。當(dāng)然,也可以通過直接復(fù)制prepared狀態(tài)的備份直接至數(shù)據(jù)目錄中實(shí)現(xiàn)還原,不要此時(shí)要求數(shù)據(jù)目錄處于一致狀態(tài)。
案列演示:
對(duì)jiaowu數(shù)據(jù)庫(kù)進(jìn)行備份和還原
1、查看數(shù)據(jù)庫(kù)和表
mysql>?show?databases; +--------------------+ |?Database???????????| +--------------------+ |?information_schema?| |?jiaowu?????????????| |?mysql??????????????| |?performance_schema?| |?test?| +--------------------+ 5?rows?in?set?(0.00?sec) mysql>?select?*?from?jiaowu.tutor; +------+---------------+--------+------+ |?TID??|?Tname?????????|?Gender?|?Age??| +------+---------------+--------+------+ |????1?|?ZhengYansheng?|?M??????|???25?| |????2?|?LiJian????????|?M??????|???26?| |????3?|?OuYangyu??????|?M??????|???27?| |????4?|?LuoChenghui???|?M??????|???25?| |????5?|?LiuYunbo??????|?M??????|???25?| |????6?|?FuJian????????|?M??????|???24?| |????7?|?LiMenglu??????|?F??????|???23?| |????8?|?BaoYintu??????|?M??????|???28?| |????9?|?WangYana??????|?F??????|???25?| |???11?|?NULL??????????|?NULL???|?NULL?| |???12?|?NULL??????????|?NULL???|?NULL?| |???13?|?NULL??????????|?NULL???|?NULL?| |???21?|?NULL??????????|?NULL???|?NULL?| |???22?|?NULL??????????|?NULL???|?NULL?| |???23?|?NULL??????????|?NULL???|?NULL?| +------+---------------+--------+------+2、innobackupex進(jìn)行備份
# innobackupex --user=root --password=123456 --databases='jiaowu' /opt/
3、準(zhǔn)備并導(dǎo)入jiaowu表
# innobackupex --user=root --password=123456 --apply-log --export /opt/2015-03-18_22-46-47/
4、刪除jiaowu數(shù)據(jù)庫(kù)
# rm -rf /mydata/data/jiaowu
5、登陸數(shù)據(jù)庫(kù)查看是否還存在jiaowu數(shù)據(jù)庫(kù)
[root@localhost ~]# mysql -e 'show databases;'
+--------------------+
| Database?????????? |
+--------------------+
| information_schema |
| mysql????????????? |
| performance_schema |
| test |
+--------------------+
#jiaowu數(shù)據(jù)庫(kù)不存在了
6、還原jiaowu數(shù)據(jù)庫(kù)
# cp -a /opt/2015-03-18_22-46-47/jiaowu/ /mydata/data/
7、修改jiaowu權(quán)限
# chown -R mysql.mysql /mydata/data/jiaowu
8、再次查看jiaowu數(shù)據(jù)庫(kù)是否存在
[root@localhost ~]# mysql -e 'use jiaowu;show tables;'
+------------------+
| Tables_in_jiaowu |
+------------------+
| tutor??????????? |
+------------------+
#jiaowu數(shù)據(jù)庫(kù)已經(jīng)被還原并且表tutor還在。成功!!!
八、導(dǎo)入或?qū)С鰡螐埍?/p>
默認(rèn)情況下,InnoDB表不能通過直接復(fù)制表文件的方式在mysql服務(wù)器之間進(jìn)行移植,即便使用了innodb_file_per_table選項(xiàng)。而使用Xtrabackup工具可以實(shí)現(xiàn)此種功能,
不過,此時(shí)需要“導(dǎo)出”表的mysql服務(wù)器啟用了innodb_file_per_table選項(xiàng)(嚴(yán)格來說,是要“導(dǎo)出”的表在其創(chuàng)建之前,mysql服務(wù)器就啟用了innodb_file_per_table選項(xiàng)),
并且“導(dǎo)入”表的服務(wù)器同時(shí)啟用了innodb_file_per_table和innodb_expand_import選項(xiàng)。
(1)“導(dǎo)出”表
導(dǎo)出表是在備份的prepare階段進(jìn)行的,因此,一旦完全備份完成,就可以在prepare過程中通過--export選項(xiàng)將某表導(dǎo)出了:
# innobackupex --apply-log --export /path/to/backup
此命令會(huì)為每個(gè)innodb表的表空間創(chuàng)建一個(gè)以.exp結(jié)尾的文件,這些以.exp結(jié)尾的文件則可以用于導(dǎo)入至其它服務(wù)器。
(2)“導(dǎo)入”表
要在mysql服務(wù)器上導(dǎo)入來自于其它服務(wù)器的某innodb表,需要先在當(dāng)前服務(wù)器上創(chuàng)建一個(gè)跟原表表結(jié)構(gòu)一致的表,而后才能實(shí)現(xiàn)將表導(dǎo)入:
mysql> CREATE TABLE mytable (...)? ENGINE=InnoDB;
然后將此表的表空間刪除:
mysql> ALTER TABLE mydatabase.mytable? DISCARD TABLESPACE;
接下來,將來自于“導(dǎo)出”表的服務(wù)器的mytable表的mytable.ibd和mytable.exp文件復(fù)制到當(dāng)前服務(wù)器的數(shù)據(jù)目錄,然后使用如下命令將其“導(dǎo)入”:
mysql> ALTER TABLE mydatabase.mytable? IMPORT TABLESPACE;
案列演示:
1、查看表
mysql> use jiaowu;
Database changed
mysql> show tables;
+------------------+
| Tables_in_jiaowu |
+------------------+
| tutor??????????? |
+------------------+
1 row in set (0.00 sec)
2、修改表的存儲(chǔ)引擎為InnoDB
mysql> alter table tutor engine=innodb;
Query OK, 15 rows affected (0.05 sec)
Records: 15? Duplicates: 0? Warnings: 0
3、innobackupex對(duì)其進(jìn)行備份
# innobackupex --user=root --password=123456 --databases='jiaowu.tutor' /opt/
4、準(zhǔn)備并導(dǎo)出
# innobackupex --user=root --password=123456 --apply-log --export /opt/2015-03-18_23-05-44/
5、刪除此表的表空間
mysql> ALTER TABLE jiaowu.tutor DISCARD TABLESPACE;
Query OK, 0 rows affected (0.01 sec)
mysql> use jiaowu;
Database changed
mysql> select * from tutor;??????? #數(shù)據(jù)已經(jīng)不存在了
ERROR 1030 (HY000): Got error -1 from storage engine
6、接下來,將來自于“導(dǎo)出”表的服務(wù)器的mytable表的mytable.ibd和mytable.exp文件復(fù)制到當(dāng)前服務(wù)器的數(shù)據(jù)目錄,然后使用如下命令將其“導(dǎo)入”:并修改權(quán)限
#?cp?/opt/2015-03-18_23-24-23/jiaowu/{tutor.exp,tutor.ibd}?/mydata/data/jiaowu/ cp:是否覆蓋"/mydata/data/jiaowu/tutor.exp"??yes #?chown?-R?mysql.mysql?/mydata/data/jiaowu/* mysql>?ALTER?TABLE?jiaowu.tutor?IMPORT?TABLESPACE; Query?OK,?0?rows?affected?(0.00?sec) mysql>?use?jiaowu; Database?changed mysql>?select?*?from?tutor; +------+---------------+--------+------+ |?TID??|?Tname?????????|?Gender?|?Age??| +------+---------------+--------+------+ |????1?|?ZhengYansheng?|?M??????|???25?| |????2?|?LiJian????????|?M??????|???26?| |????3?|?OuYangyu??????|?M??????|???27?| |????4?|?LuoChenghui???|?M??????|???25?| |????5?|?LiuYunbo??????|?M??????|???25?| |????6?|?FuJian????????|?M??????|???24?| |????7?|?LiMenglu??????|?F??????|???23?| |????8?|?BaoYintu??????|?M??????|???28?| |????9?|?WangYana??????|?F??????|???25?| |???11?|?NULL??????????|?NULL???|?NULL?| |???12?|?NULL??????????|?NULL???|?NULL?| |???13?|?NULL??????????|?NULL???|?NULL?| |???21?|?NULL??????????|?NULL???|?NULL?| |???22?|?NULL??????????|?NULL???|?NULL?| |???23?|?NULL??????????|?NULL???|?NULL?| +------+---------------+--------+------+ 15?rows?in?set?(0.00?sec)轉(zhuǎn)載于:https://blog.51cto.com/strongit/1708729
總結(jié)
以上是生活随笔為你收集整理的Centos 推荐使用xtrabackup备份数据库的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解剖SQLSERVER 第六篇 对Or
- 下一篇: mysql 日期操作 增减天数、时间转换