日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

MySQL進(jìn)階(十七)使用xtrabackup進(jìn)行數(shù)據(jù)庫(kù)備份

 深秋微涼3 2016-02-07
MySQL進(jìn)階(十七)
使用xtrabackup進(jìn)行數(shù)據(jù)庫(kù)備份

一、安裝
1、簡(jiǎn)介
Xtrabackup是由percona提供的mysql數(shù)據(jù)庫(kù)備份工具,據(jù)官方介紹,這也是世界上惟一一款開(kāi)源的能夠?qū)nnodb和xtradb數(shù)據(jù)庫(kù)進(jìn)行熱備的工具。特點(diǎn):
(1)備份過(guò)程快速、可靠;
(2)備份過(guò)程不會(huì)打斷正在執(zhí)行的事務(wù);
(3)能夠基于壓縮等功能節(jié)約磁盤空間和流量;
(4)自動(dòng)實(shí)現(xiàn)備份檢驗(yàn);
(5)還原速度快;
2、安裝、
其最新版的軟件可從 http://www./software/percona-xtrabackup/ 獲得。本文基于RHEL5.8的系統(tǒng),因此,直接下載相應(yīng)版本的rpm包安裝即可。

二、備份的實(shí)現(xiàn)
1、完全備份
# innobackupex --user=DBUSER --password=DBUSERPASS /path/to/BACKUP-DIR/
如果要使用一個(gè)最小權(quán)限的用戶進(jìn)行備份,則可基于如下命令創(chuàng)建此類用戶:
mysql> CREATE USER ’bkpuser’@’localhost’ IDENTIFIED BY ’s3cret’;
mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM ’bkpuser’;
mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO ’bkpuser’@’localhost’;
mysql> FLUSH PRIVILEGES;
使用innobakupex備份時(shí),其會(huì)調(diào)用xtrabackup備份所有的InnoDB表,復(fù)制所有關(guān)于表結(jié)構(gòu)定義的相關(guān)文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相關(guān)文件,同時(shí)還會(huì)備份觸發(fā)器和數(shù)據(jù)庫(kù)配置信息相關(guān)的文件。這些文件會(huì)被保存至一個(gè)以時(shí)間命令的目錄中。
在備份的同時(shí),innobackupex還會(huì)在備份目錄中創(chuàng)建如下文件:
(1)xtrabackup_checkpoints —— 備份類型(如完全或增量)、備份狀態(tài)(如是否已經(jīng)為prepared狀態(tài))和LSN(日志序列號(hào))范圍信息;
每個(gè)InnoDB頁(yè)(通常為16k大小)都會(huì)包含一個(gè)日志序列號(hào),即LSN。LSN是整個(gè)數(shù)據(jù)庫(kù)系統(tǒng)的系統(tǒng)版本號(hào),每個(gè)頁(yè)面相關(guān)的LSN能夠表明此頁(yè)面最近是如何發(fā)生改變的。
(2)xtrabackup_binlog_info —— mysql服務(wù)器當(dāng)前正在使用的二進(jìn)制日志文件及至備份這一刻為止二進(jìn)制日志事件的位置。
(3)xtrabackup_binlog_pos_innodb —— 二進(jìn)制日志文件及用于InnoDB或XtraDB表的二進(jìn)制日志文件的當(dāng)前position。
(4)xtrabackup_binary —— 備份中用到的xtrabackup的可執(zhí)行文件;
(5)backup-my.cnf —— 備份命令用到的配置選項(xiàng)信息;
在使用innobackupex進(jìn)行備份時(shí),還可以使用--no-timestamp選項(xiàng)來(lái)阻止命令自動(dòng)創(chuàng)建一個(gè)以時(shí)間命名的目錄;如此一來(lái),innobackupex命令將會(huì)創(chuàng)建一個(gè)BACKUP-DIR目錄來(lái)存儲(chǔ)備份數(shù)據(jù)。

2、準(zhǔn)備(prepare)一個(gè)完全備份
一般情況下,在備份完成后,數(shù)據(jù)尚且不能用于恢復(fù)操作,因?yàn)閭浞莸臄?shù)據(jù)中可能會(huì)包含尚未提交的事務(wù)或已經(jīng)提交但尚未同步至數(shù)據(jù)文件中的事務(wù)。因此,此時(shí)數(shù)據(jù)文件仍處理不一致?tīng)顟B(tài)?!皽?zhǔn)備”的主要作用正是通過(guò)回滾未提交的事務(wù)及同步已經(jīng)提交的事務(wù)至數(shù)據(jù)文件也使得數(shù)據(jù)文件處于一致性狀態(tài)。
innobakupex命令的--apply-log選項(xiàng)可用于實(shí)現(xiàn)上述功能。如下面的命令:
# innobackupex --apply-log /path/to/BACKUP-DIR
如果執(zhí)行正確,其最后輸出的幾行信息通常如下:
xtrabackup: starting shutdown with innodb_fast_shutdown = 1
150709 9:01:36 InnoDB: Starting shutdown...
150709 9:01:40 InnoDB: Shutdown completed; log sequence number 92036620
150709 09:01:40 innobackupex: completed OK!
在實(shí)現(xiàn)“準(zhǔn)備”的過(guò)程中,innobackupex通常還可以使用--use-memory選項(xiàng)來(lái)指定其可以使用的內(nèi)存的大小,默認(rèn)通常為100M。如果有足夠的內(nèi)存可用,可以多劃分一些內(nèi)存給prepare的過(guò)程,以提高其完成速度。

3、從一個(gè)完全備份中恢復(fù)數(shù)據(jù)
innobackupex命令的--copy-back選項(xiàng)用于執(zhí)行恢復(fù)操作,其通過(guò)復(fù)制所有數(shù)據(jù)相關(guān)的文件至mysql服務(wù)器DATADIR目錄中來(lái)執(zhí)行恢復(fù)過(guò)程。innobackupex通過(guò)backup-my.cnf來(lái)獲取DATADIR目錄的相關(guān)信息。
# innobackupex --copy-back /path/to/BACKUP-DIR
如果執(zhí)行正確,其輸出信息的最后幾行通常如下:
innobackupex: Starting to copy InnoDB log files
innobackupex: in '/backup/2015-07-09_08-17-03'
innobackupex: back to original InnoDB log directory '/mydata/data'
innobackupex: Finished copying back files.
150709 09:36:10 innobackupex: completed OK!
請(qǐng)確保如上信息的最行一行出現(xiàn)“innobackupex: completed OK!”。
當(dāng)數(shù)據(jù)恢復(fù)至DATADIR目錄以后,還需要確保所有數(shù)據(jù)文件的屬主和屬組均為正確的用戶,如mysql,否則,在啟動(dòng)mysqld之前還需要事先修改數(shù)據(jù)文件的屬主和屬組。如:
# chown -R mysql:mysql /mydata/data/

4、使用innobackupex進(jìn)行增量備份
每個(gè)InnoDB的頁(yè)面都會(huì)包含一個(gè)LSN信息,每當(dāng)相關(guān)的數(shù)據(jù)發(fā)生改變,相關(guān)的頁(yè)面的LSN就會(huì)自動(dòng)增長(zhǎng)。這正是InnoDB表可以進(jìn)行增量備份的基礎(chǔ),即innobackupex通過(guò)備份上次完全備份之后發(fā)生改變的頁(yè)面來(lái)實(shí)現(xiàn)。
要實(shí)現(xiàn)第一次增量備份,可以使用下面的命令進(jìn)行:
# innobackupex --incremental /backup --incremental-basedir=BASEDIR
其中,BASEDIR指的是完全備份所在的目錄,此命令執(zhí)行結(jié)束后,innobackupex命令會(huì)在/backup目錄中創(chuàng)建一個(gè)新的以時(shí)間命名的目錄以存放所有的增量備份數(shù)據(jù)。另外,在執(zhí)行過(guò)增量備份之后再一次進(jìn)行增量備份時(shí),其--incremental-basedir應(yīng)該指向上一次的增量備份所在的目錄。
需要注意的是,增量備份僅能應(yīng)用于InnoDB或XtraDB表,對(duì)于MyISAM表而言,執(zhí)行增量備份時(shí)其實(shí)進(jìn)行的是完全備份。
“準(zhǔn)備”(prepare)增量備份與整理完全備份有著一些不同,尤其要注意的是:
(1)需要在每個(gè)備份(包括完全和各個(gè)增量備份)上,將已經(jīng)提交的事務(wù)進(jìn)行“重放”?!爸胤拧敝?,所有的備份數(shù)據(jù)將合并到完全備份上。
(2)基于所有的備份將未提交的事務(wù)進(jìn)行“回滾”。
于是,操作就變成了:
# innobackupex --apply-log --redo-only BASE-DIR
接著執(zhí)行:
# innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1
而后是第二個(gè)增量:
# innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-2
其中BASE-DIR指的是完全備份所在的目錄,而INCREMENTAL-DIR-1指的是第一次增量備份的目錄,INCREMENTAL-DIR-2指的是第二次增量備份的目錄,其它依次類推,即如果有多次增量備份,每一次都要執(zhí)行如上操作;

5、Xtrabackup的“流”及“備份壓縮”功能
Xtrabackup對(duì)備份的數(shù)據(jù)文件支持“流”功能,即可以將備份的數(shù)據(jù)通過(guò)STDOUT傳輸給tar程序進(jìn)行歸檔,而不是默認(rèn)的直接保存至某備份目錄中。要使用此功能,僅需要使用--stream選項(xiàng)即可。如:
# innobackupex --stream=tar /backup | gzip > /backup/`date +%F_%H-%M-%S`.tar.gz
甚至也可以使用類似如下命令將數(shù)據(jù)備份至其它服務(wù)器:
# innobackupex --stream=tar /backup | ssh user@www.magedu.com 'cat - > /backups/`date +%F_%H-%M-%S`.tar'
此外,在執(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)或共享的表空間通過(guò)innodb_data_file_path選項(xiàng)存儲(chǔ)在多個(gè)ibdata文件中。對(duì)某一數(shù)據(jù)庫(kù)的多個(gè)文件的復(fù)制無(wú)法利用到此功能。其簡(jiǎn)單使用方法如下:
# innobackupex --parallel /path/to/backup
同時(shí),innobackupex備份的數(shù)據(jù)文件也可以存儲(chǔ)至遠(yuǎn)程主機(jī),這可以使用--remote-host選項(xiàng)來(lái)實(shí)現(xiàn):
# innobackupex --remote-host=root@www.magedu.com /path/IN/REMOTE/HOST/to/backup

6、導(dǎo)入或?qū)С鰡螐埍?br>
默認(rèn)情況下,InnoDB表不能通過(guò)直接復(fù)制表文件的方式在mysql服務(wù)器之間進(jìn)行移植,即便使用了innodb_file_per_table選項(xiàng)。而使用Xtrabackup工具可以實(shí)現(xiàn)此種功能,不過(guò),此時(shí)需要“導(dǎo)出”表的mysql服務(wù)器啟用了innodb_file_per_table選項(xiàng)(嚴(yán)格來(lái)說(shuō),是要“導(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過(guò)程中通過(guò)--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)入來(lái)自于其它服務(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;
接下來(lái),將來(lái)自于“導(dǎo)出”表的服務(wù)器的mytable表的mytable.ibd和mytable.exp文件復(fù)制到當(dāng)前服務(wù)器的數(shù)據(jù)目錄,然后使用如下命令將其“導(dǎo)入”:
mysql> ALTER TABLE mydatabase.mytable IMPORT TABLESPACE;

7、使用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ù)通過(guò)管道傳輸給其它程序進(jìn)行處理。
此外,還原部分備份跟還原全部數(shù)據(jù)的備份也有所不同,即你不能通過(guò)簡(jiǎn)單地將prepared的部分備份使用--copy-back選項(xiàng)直接復(fù)制回?cái)?shù)據(jù)目錄,而是要通過(guò)導(dǎo)入表的方向來(lái)實(shí)現(xiàn)還原。當(dāng)然,有些情況下,部分備份也可以直接通過(guò)--copy-back進(jìn)行還原,但這種方式還原而來(lái)的數(shù)據(jù)多數(shù)會(huì)產(chǎn)生數(shù)據(jù)不一致的問(wèn)題,因此,無(wú)論如何不推薦使用這種方式。
(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ù),彼此間需要以空格隔開(kāi);同時(shí),在指定某數(shù)據(jù)庫(kù)時(shí),也可以只指定其中的某張表。此外,此選項(xiàng)也可以接受一個(gè)文件為參數(shù),文件中每一行為一個(gè)要備份的對(duì)象。如:
# innobackupex --databases='mageedu testdb' /path/to/backup
(2)整理(preparing)部分備份
prepare部分備份的過(guò)程類似于導(dǎo)出表的過(guò)程,要使用--export選項(xiàng)進(jìn)行:
# innobackupex --apply-log --export /pat/to/partial/backup
此命令執(zhí)行過(guò)程中,innobackupex會(huì)調(diào)用xtrabackup命令從數(shù)據(jù)字典中移除缺失的表,因此,會(huì)顯示出許多關(guān)于“表不存在”類的警告信息。同時(shí),也會(huì)顯示出為備份文件中存在的表創(chuàng)建.exp文件的相關(guān)信息。
(3)還原部分備份
還原部分備份的過(guò)程跟導(dǎo)入表的過(guò)程相同。當(dāng)然,也可以通過(guò)直接復(fù)制prepared狀態(tài)的備份直接至數(shù)據(jù)目錄中實(shí)現(xiàn)還原,不要此時(shí)要求數(shù)據(jù)目錄處于一致?tīng)顟B(tài)。

歡迎各位指出不足
共同交流進(jìn)步

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多