日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
詳解xtrabackup的使用方法

xtrabackup是Percona公司CTO Vadim參與開發(fā)的一款基于InnoDB的在線熱備工具,具有開源,免費,支持在線熱備,備份恢復速度快,占用磁盤空間小等特點,并且支持不同情況下的多種備份形式,下面為大家講解一下xtrabackup的使用方法。

專業(yè)領域包括網(wǎng)站制作、成都網(wǎng)站制作、商城網(wǎng)站定制開發(fā)、微信營銷、系統(tǒng)平臺開發(fā), 與其他網(wǎng)站設計及系統(tǒng)開發(fā)公司不同,創(chuàng)新互聯(lián)公司的整合解決方案結合了幫做網(wǎng)絡品牌建設經(jīng)驗和互聯(lián)網(wǎng)整合營銷的理念,并將策略和執(zhí)行緊密結合,為客戶提供全網(wǎng)互聯(lián)網(wǎng)整合方案。

img

Xtrabackup安裝

其最新版的軟件可從 http://www.percona.com/software/percona-xtrabackup/ 獲得。本文基于CentOS6.6的系統(tǒng),因此,直接下載相應版本的rpm包安裝即可。

[root@localhost xtrabackup]# yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL //安裝依賴包

[root@localhost xtrabackup]# rpm -ivh percona-xtrabackup-2.2.4-5004.el6.x86_64.rpm    
warning: percona-xtrabackup-2.2.4-5004.el6.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY  
Preparing... ########################################### [100%]  
1:percona-xtrabackup ########################################### [100%]  

Xtrabackup備份的實現(xiàn)

1、完全備份

# innobackupex --user=DBUSER --password=DBUSERPASS  /path/to/BACKUP-DIR/

如果要使用一個最小權限的用戶進行備份,則可基于如下命令創(chuàng)建此類用戶:

mysql> CREATE USER  ’feiyu'@’localhost’ IDENTIFIED BY ’s3cret’; mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM ’feiyu’; mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO ’feiyu’@’localhost’; mysql> FLUSH PRIVILEGES; 

使用innobakupex備份時,其會調(diào)用xtrabackup備份所有的InnoDB表,復制所有關于表結構定義的相關文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相關文件,同時還會備份觸發(fā)器和數(shù)據(jù)庫配置信息相關的文件。這些文件會被保存至一個以時間命令的目錄中。

在備份的同時,innobackupex還會在備份目錄中創(chuàng)建如下文件:

(1)xtrabackup_checkpoints —— 備份類型(如完全或增量)、備份狀態(tài)(如是否已經(jīng)為prepared狀態(tài))和LSN(日志序列號)范圍信息;

每個InnoDB頁(通常為16k大小)都會包含一個日志序列號,即LSN。LSN是整個數(shù)據(jù)庫系統(tǒng)的系統(tǒng)版本號,每個頁面相關的LSN能夠表明此頁面最近是如何發(fā)生改變的。

(2)xtrabackup_binlog_info —— mysql服務器當前正在使用的二進制日志文件及至備份這一刻為止二進制日志事件的位置。

(3)xtrabackup_binlog_pos_innodb —— 二進制日志文件及用于InnoDB或XtraDB表的二進制日志文件的當前position。

(4)xtrabackup_binary —— 備份中用到的xtrabackup的可執(zhí)行文件;

(5)backup-my.cnf —— 備份命令用到的配置選項信息;

在使用innobackupex進行備份時,還可以使用–no-timestamp選項來阻止命令自動創(chuàng)建一個以時間命名的目錄;如此一來,innobackupex命令將會創(chuàng)建一個BACKUP-DIR目錄來存儲備份數(shù)據(jù)。

2、準備(prepare)一個完全備份

一般情況下,在備份完成后,數(shù)據(jù)尚且不能用于恢復操作,因為備份的數(shù)據(jù)中可能會包含尚未提交的事務或已經(jīng)提交但尚未同步至數(shù)據(jù)文件中的事務。因此,此時數(shù)據(jù)文件仍處理不一致狀態(tài)?!皽蕚洹钡闹饕饔谜峭ㄟ^回滾未提交的事務及同步已經(jīng)提交的事務至數(shù)據(jù)文件也使得數(shù)據(jù)文件處于一致性狀態(tài)。

innobakupex命令的–apply-log選項可用于實現(xiàn)上述功能。如下面的命令:

# innobackupex --apply-log  /path/to/BACKUP-DIR

如果執(zhí)行正確,其最后輸出的幾行信息通常如下:

xtrabackup: starting shutdown with innodb_fast_shutdown = 1
120407  9:01:36  InnoDB: Starting shutdown...
120407  9:01:40  InnoDB: Shutdown completed; log sequence number 92036620
120407 09:01:40  innobackupex: completed OK!

在實現(xiàn)“準備”的過程中,innobackupex通常還可以使用–use-memory選項來指定其可以使用的內(nèi)存的大小,默認通常為100M。如果有足夠的內(nèi)存可用,可以多劃分一些內(nèi)存給prepare的過程,以提高其完成速度。

3、從一個完全備份中恢復數(shù)據(jù)

innobackupex命令的–copy-back選項用于執(zhí)行恢復操作,其通過復制所有數(shù)據(jù)相關的文件至mysql服務器DATADIR目錄中來執(zhí)行恢復過程。innobackupex通過backup-my.cnf來獲取DATADIR目錄的相關信息。

# innobackupex --copy-back  /path/to/BACKUP-DIR

如果執(zhí)行正確,其輸出信息的最后幾行通常如下:

innobackupex: Starting to copy InnoDB log files
innobackupex: in '/backup/2012-04-07_08-17-03'
innobackupex: back to original InnoDB log directory '/mydata/data'
innobackupex: Finished copying back files.

120407 09:36:10  innobackupex: completed OK!

請確保如上信息的最行一行出現(xiàn)“innobackupex: completed OK!”。

當數(shù)據(jù)恢復至DATADIR目錄以后,還需要確保所有數(shù)據(jù)文件的屬主和屬組均為正確的用戶,如mysql,否則,在啟動mysqld之前還需要事先修改數(shù)據(jù)文件的屬主和屬組。如:

# chown -R  mysql:mysql  /mydata/data/

4、使用innobackupex進行增量備份

每個InnoDB的頁面都會包含一個LSN信息,每當相關的數(shù)據(jù)發(fā)生改變,相關的頁面的LSN就會自動增長。這正是InnoDB表可以進行增量備份的基礎,即innobackupex通過備份上次完全備份之后發(fā)生改變的頁面來實現(xiàn)。

要實現(xiàn)第一次增量備份,可以使用下面的命令進行:

# innobackupex --incremental /backup --incremental-basedir=BASEDIR

(要對與完全備份實行增量備份,basedir指完全備份的目錄,要對上一次增量備份再執(zhí)行增量備份,則指定上一次 增量備份的目錄)

其中,BASEDIR指的是完全備份所在的目錄,此命令執(zhí)行結束后,innobackupex命令會在/backup目錄中創(chuàng)建一個新的以時間命名的目錄以存放所有的增量備份數(shù)據(jù)。另外,在執(zhí)行過增量備份之后再一次進行增量備份時,其–incremental-basedir應該指向上一次的增量備份所在的目錄。

需要注意的是,增量備份僅能應用于InnoDB或XtraDB表,對于MyISAM表而言,執(zhí)行增量備份時其實進行的是完全備份。

“準備”(prepare)增量備份與整理完全備份有著一些不同,尤其要注意的是:

(1)需要在每個備份(包括完全和各個增量備份)上,將已經(jīng)提交的事務進行“重放”。“重放”之后,所有的備份數(shù)據(jù)將合并到完全備份上。 (2)基于所有的備份將未提交的事務進行“回滾”。 (以下為合并增量備份到完全備份,然后恢復時只指定完全備份即可)

于是,操作就變成了:

# innobackupex --apply-log --redo-only BASE-DIR

接著執(zhí)行:

# innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1

而后是第二個增量:

# innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-2

其中BASE-DIR指的是完全備份所在的目錄,而INCREMENTAL-DIR-1指的是第一次增量備份的目錄,INCREMENTAL-DIR-2指的是第二次增量備份的目錄,其它依次類推,即如果有多次增量備份,每一次都要執(zhí)行如上操作;

5、Xtrabackup的“流”及“備份壓縮”功能

Xtrabackup對備份的數(shù)據(jù)文件支持“流”功能,即可以將備份的數(shù)據(jù)通過STDOUT傳輸給tar程序進行歸檔,而不是默認的直接保存至某備份目錄中。要使用此功能,僅需要使用–stream選項即可。如:

# innobackupex --stream=tar  /backup | gzip > /backup/`date +%F_%H-%M-%S`.tar.gz

甚至也可以使用類似如下命令將數(shù)據(jù)備份至其它服務器:

# innobackupex --stream=tar  /backup | ssh user@www.feiyu.com  "cat -  > /backups/`date +%F_%H-%M-%S`.tar"

此外,在執(zhí)行本地備份時,還可以使用–parallel選項對多個文件進行并行復制。此選項用于指定在復制時啟動的線程數(shù)目。當然,在實際進行備份時要利用此功能的便利性,也需要啟用innodb_file_per_table選項或共享的表空間通過innodb_data_file_path選項存儲在多個ibdata文件中。對某一數(shù)據(jù)庫的多個文件的復制無法利用到此功能。其簡單使用方法如下:

# innobackupex --parallel  /path/to/backup

同時,innobackupex備份的數(shù)據(jù)文件也可以存儲至遠程主機,這可以使用–remote-host選項來實現(xiàn):

# innobackupex --remote-host=root@www.feiyu.com  /path/IN/REMOTE/HOST/to/backup

6、導入或?qū)С鰡螐埍?/strong>

默認情況下,InnoDB表不能通過直接復制表文件的方式在mysql服務器之間進行移植,即便使用了innodb_file_per_table選項。而使用Xtrabackup工具可以實現(xiàn)此種功能,不過,此時需要“導出”表的mysql服務器啟用了innodb_file_per_table選項(嚴格來說,是要“導出”的表在其創(chuàng)建之前,mysql服務器就啟用了innodb_file_per_table選項),并且“導入”表的服務器同時啟用了innodb_file_per_table和innodb_expand_import選項。

(1)“導出”表 導出表是在備份的prepare階段進行的,因此,一旦完全備份完成,就可以在prepare過程中通過–export選項將某表導出了:

# innobackupex --apply-log --export /path/to/backup

此命令會為每個innodb表的表空間創(chuàng)建一個以.exp結尾的文件,這些以.exp結尾的文件則可以用于導入至其它服務器。 (2)“導入”表 要在mysql服務器上導入來自于其它服務器的某innodb表,需要先在當前服務器上創(chuàng)建一個跟原表表結構一致的表,而后才能實現(xiàn)將表導入:

mysql> CREATE TABLE mytable (...)  ENGINE=InnoDB;

然后將此表的表空間刪除:

mysql> ALTER TABLE mydatabase.mytable  DISCARD TABLESPACE;

接下來,將來自于“導出”表的服務器的mytable表的mytable.ibd和mytable.exp文件復制到當前服務器的數(shù)據(jù)目錄,然后使用如下命令將其“導入”:

mysql> ALTER TABLE mydatabase.mytable  IMPORT TABLESPACE;

7、使用Xtrabackup對數(shù)據(jù)庫進行部分備份

Xtrabackup也可以實現(xiàn)部分備份,即只備份某個或某些指定的數(shù)據(jù)庫或某數(shù)據(jù)庫中的某個或某些表。但要使用此功能,必須啟用innodb_file_per_table選項,即每張表保存為一個獨立的文件。同時,其也不支持–stream選項,即不支持將數(shù)據(jù)通過管道傳輸給其它程序進行處理。

此外,還原部分備份跟還原全部數(shù)據(jù)的備份也有所不同,即你不能通過簡單地將prepared的部分備份使用–copy-back選項直接復制回數(shù)據(jù)目錄,而是要通過導入表的方向來實現(xiàn)還原。當然,有些情況下,部分備份也可以直接通過–copy-back進行還原,但這種方式還原而來的數(shù)據(jù)多數(shù)會產(chǎn)生數(shù)據(jù)不一致的問題,因此,無論如何不推薦使用這種方式。

(1)創(chuàng)建部分備份

創(chuàng)建部分備份的方式有三種:正則表達式(–include), 枚舉表文件(–tables-file)和列出要備份的數(shù)據(jù)庫(–databases)。

(a)使用–include 使用–include時,要求為其指定要備份的表的完整名稱,即形如databasename.tablename,如:

# innobackupex --include='^feiyu[.]tb1'  /path/to/backup

(b)使用–tables-file 此選項的參數(shù)需要是一個文件名,此文件中每行包含一個要備份的表的完整名稱;如:

# echo -e 'feiyu.tb1\nmageedu.tb2' > /tmp/tables.txt# innobackupex --tables-file=/tmp/tables.txt  /path/to/backup

(c)使用–databases 此選項接受的參數(shù)為數(shù)據(jù)名,如果要指定多個數(shù)據(jù)庫,彼此間需要以空格隔開;同時,在指定某數(shù)據(jù)庫時,也可以只指定其中的某張表。此外,此選項也可以接受一個文件為參數(shù),文件中每一行為一個要備份的對象。如:

# innobackupex --databases="feiyu testdb"  /path/to/backup

(2)整理(preparing)部分備份 prepare部分備份的過程類似于導出表的過程,要使用–export選項進行:

# innobackupex --apply-log --export  /pat/to/partial/backup

此命令執(zhí)行過程中,innobackupex會調(diào)用xtrabackup命令從數(shù)據(jù)字典中移除缺失的表,因此,會顯示出許多關于“表不存在”類的警告信息。同時,也會顯示出為備份文件中存在的表創(chuàng)建.exp文件的相關信息。

(3)還原部分備份 還原部分備份的過程跟導入表的過程相同。當然,也可以通過直接復制prepared狀態(tài)的備份直接至數(shù)據(jù)目錄中實現(xiàn)還原,不要此時要求數(shù)據(jù)目錄處于一致狀態(tài)。

下面實際演示其完整的備份流程:

←#14#root@localhost /tmp/full-backup  →innobackupex --user=root /tmp/full-backup/  #完全備份

InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy
and Percona LLC and/or its affiliates 2009-2013.  All Rights Reserved.
。。。。。。。。。。

xtrabackup: The latest check point (for incremental): '2987626'
xtrabackup: Stopping log copying thread.
.>> log scanned up to (2987626)

xtrabackup: Creating suspend file '/tmp/full-backup/2015-06-25_05-58-26/xtrabackup_log_copied' with pid '7858'
xtrabackup: Transaction log of lsn (2987626) to (2987626) was copied.
150625 05:58:30  innobackupex: All tables unlocked

innobackupex: Backup created in directory '/tmp/full-backup/2015-06-25_05-58-26'
innobackupex: MySQL binlog position: filename 'mysql-bin.000001', position 2383
150625 05:58:30  innobackupex: Connection to database server closed
150625 05:58:30  innobackupex: completed OK!
mysql> insert into  tutors(tname) values('stu00011');#在數(shù)據(jù)庫中插入數(shù)據(jù)
Query OK, 1 row affected (0.03 sec)

mysql> insert into  tutors(tname) values('stu00012');
Query OK, 1 row affected (0.00 sec)
←#246#root@localhost /tmp  →innobackupex --incremental /tmp/full-backup/ --incremental-basedir=/tmp/full-backup/2015-06-25_05-58-26/ #做增量備份

InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy
and Percona LLC and/or its affiliates 2009-2013.  All Rights Reserved.
。。。。。。。。。。。
xtrabackup: Creating suspend file '/tmp/full-backup/2015-06-25_06-00-48/xtrabackup_log_copied' with pid '8663'
xtrabackup: Transaction log of lsn (2988209) to (2988209) was copied.
150625 06:00:53  innobackupex: All tables unlocked

innobackupex: Backup created in directory '/tmp/full-backup/2015-06-25_06-00-48'
innobackupex: MySQL binlog position: filename 'mysql-bin.000001', position 2924
150625 06:00:53  innobackupex: Connection to database server closed
150625 06:00:53  innobackupex: completed OK!
mysql> insert into  tutors(tname) values('stu00014');  #再次插入數(shù)據(jù)
Query OK, 1 row affected (0.02 sec)

mysql> insert into  tutors(tname) values('stu00015');
Query OK, 1 row affected (0.00 sec)
←#247#root@localhost /tmp  →innobackupex --incremental /tmp/full-backup/ --incremental-basedir=/tmp/full-backup/2015-06-25_06-00-48  #再次做增量備份

InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy
and Percona LLC and/or its affiliates 2009-2013.  All Rights Reserved
。。。。。。。。。
xtrabackup: Creating suspend file '/tmp/full-backup/2015-06-25_06-02-41/xtrabackup_log_copied' with pid '9259'
xtrabackup: Transaction log of lsn (2988781) to (2988781) was copied.
150625 06:02:45  innobackupex: All tables unlocked

innobackupex: Backup created in directory '/tmp/full-backup/2015-06-25_06-02-41'
innobackupex: MySQL binlog position: filename 'mysql-bin.000001', position 3465
150625 06:02:46  innobackupex: Connection to database server closed
150625 06:02:46  innobackupex: completed OK!
←#266#root@localhost /tmp/full-backup/2015-06-25_05-58-26  →cat  xtrabackup_checkpoints  #查看日志序列號是否一致
backup_type = log-applied
from_lsn = 0
to_lsn = 2987626
last_lsn = 2987626
compact = 0
←#267#root@localhost /tmp/full-backup/2015-06-25_05-58-26  →cd ../2015-06-25_06-00-48/
←#268#root@localhost /tmp/full-backup/2015-06-25_06-00-48  →cat  xtrabackup_checkpoints
backup_type = incremental
from_lsn = 2987626
to_lsn = 2988209
last_lsn = 2988209
compact = 0
←#269#root@localhost /tmp/full-backup/2015-06-25_06-00-48  →cd ../2015-06-25_06-02-41/
←#270#root@localhost /tmp/full-backup/2015-06-25_06-02-41  →cat  xtrabackup_checkpoints
backup_type = incremental
from_lsn = 2988209
to_lsn = 2988781
last_lsn = 2988781
compact = 0
←#248#root@localhost /tmp  →innobackupex --apply-log --redo-only /tmp/full-backu2015-06-25_05-58-26/  #做準備
InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy
and Percona LLC and/or its affiliates 2009-2013.  All Rights Reserved.



[notice (again)]
 If you use binary log and don't use any hack of group commit,  the binary log position seems to be: InnoDB: Last MySQL binlog file position 0 2241, file name ./mysql-bin.000001 xtrabackup: starting shutdown with innodb_fast_shutdown = 1 InnoDB: Starting shutdown... InnoDB: Shutdown completed; log sequence number 2987626 150625 06:04:03  innobackupex: completed OK! ←#249#root@localhost /tmp  →innobackupex --apply-log --redo-only /tmp/full-backu2015-06-25_05-58-26/ --incremental-dir=/tmp/full-backup/2015-06-25_06-00-48/ #合并第一次增量備份文件 。。。。。。。。。。 innobackupex: Copying '/tmp/full-backup/2015-06-25_06-00-48/management/admin.frm' to '/tmp/full-backup/2015-06-25_05-58-26/management/admin.frm' 150625 06:05:28  innobackupex: completed OK! ←#251#root@localhost /tmp  →innobackupex --apply-log --redo-only /tmp/full-backu2015-06-25_05-58-26/ --incremental-dir=/tmp/full-backup/2015-06-25_06-02-41/  #合并第二次增量備份文件 。。。。。。。。。。。。。。。。 innobackupex: Copying '/tmp/full-backup/2015-06-25_06-02-41/management/classinfo.frm' to '/tmp/full-backup/2015-06-25_05-58-26/management/classinfo.frm' innobackupex: Copying '/tmp/full-backup/2015-06-25_06-02-41/management/admin.frm' to '/tmp/full-backup/2015-06-25_05-58-26/management/admin.frm' 150625 06:07:10  innobackupex: completed OK! ←#258#root@localhost ~  →rm -rf  /mydata/data1/*  #刪除數(shù)據(jù)文件目錄 ←#259#root@localhost ~  →innobackupex --copy-back  /tmp/full-backup/2015-06-25_05-58-26/  #恢復 。。。。。。。。。。。。。。。。 innobackupex: Starting to copy InnoDB log files innobackupex: in '/tmp/full-backup/2015-06-25_05-58-26' innobackupex: back to original InnoDB log directory '/mydata/data1' innobackupex: Finished copying back files. 150625 06:12:29  innobackupex: completed OK! ←#276#root@localhost /mydata/data1  →chown -R mysql.mysql ./*  #修改屬主和屬組 

當前題目:詳解xtrabackup的使用方法
地址分享:http://www.5511xx.com/article/cdeshpj.html