程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL中應用innobackupex、xtrabackup停止年夜數據的備份和復原教程

MySQL中應用innobackupex、xtrabackup停止年夜數據的備份和復原教程

編輯:MySQL綜合教程

MySQL中應用innobackupex、xtrabackup停止年夜數據的備份和復原教程。本站提示廣大學習愛好者:(MySQL中應用innobackupex、xtrabackup停止年夜數據的備份和復原教程)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL中應用innobackupex、xtrabackup停止年夜數據的備份和復原教程正文


年夜數據量備份與復原,一直是個難點。當MYSQL超10G,用mysqldump來導出就比擬慢了。在這裡推舉xtrabackup,這個對象比mysqldump要快許多。

1、Xtrabackup引見

1、Xtrabackup是甚麼

Xtrabackup是一個對InnoDB做數據備份的對象,支撐在線熱備份(備份時不影響數據讀寫),是貿易備份對象InnoDB Hotbackup的一個很好的替換品。

Xtrabackup有兩個重要的對象:xtrabackup、innobackupex

1、xtrabackup只能備份InnoDB和XtraDB兩種數據表,而不克不及備份MyISAM數據表
2、 innobackupex是參考了InnoDB Hotbackup的innoback劇本修正而來的.innobackupex是一個perl劇本封裝,封裝了xtrabackup。重要是為了便利的 同時備份InnoDB和MyISAM引擎的表,但在處置myisam時須要加一個讀鎖。而且參加了一些應用的選項。如slave-info可以記載備份恢 復後,作為slave須要的一些信息,依據這些信息,可以很便利的應用備份來重做slave。

2、Xtrabackup可以做甚麼 :

在線(熱)備份全部庫的InnoDB、 XtraDB表

在xtrabackup的上一次整庫備份基本上做增量備份(innodb only)
以流的情勢發生備份,可以直接保留到長途機械上(本機硬盤空間缺乏時很有效)

MySQL數據庫自己供給的對象其實不支撐真實的增量備份,二進制日記恢復是point-in-time(時光點)的恢復而不是增量備份。
Xtrabackup對象支撐對InnoDB存儲引擎的增量備份,任務道理以下:

(1)起首完成一個完整備份,並記載下此時檢討點的LSN(Log Sequence Number)。
(2)在過程增量備份時,比擬表空間中每一個頁的LSN能否年夜於前次備份時的LSN,假如是,則備份該頁,同時記載以後檢討點的LSN。
首 先,在logfile中找到並記載最初一個checkpoint(“last checkpoint LSN”),然後開端從LSN的地位開端拷貝InnoDB的logfile到xtrabackup_logfile;接著,開端拷貝全體的數據文 件.ibd;在拷貝全體數據文件停止以後,才停滯拷貝logfile。

由於logfile外面記載全體的數據修正情形,所以,即時在備份進程中數據文件被修正過了,恢復時依然可以或許經由過程解析xtrabackup_logfile堅持數據的分歧。

由於innobackupex支撐innodb,myisam,所以本文說一下,怎樣應用innobackupex。

二,裝置xtrabackup

1、下載地址

http://www.percona.com/downloads/XtraBackup/

2、裝置

依據需求,選擇分歧的版本,我選擇的是rpm裝置包,假如報以下毛病

[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
error: Failed dependencies:
perl(Time::HiRes) is needed by percona-xtrabackup-2.2.4-5004.el6.x86_64

處理方法:

[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 2.2.4不支撐mysql 5.1.73,所以假如要用新的xtrabackup,就要用高版本的mysql數據庫,否則就會報以下毛病:
innobackupex: Error: Unsupported server version: '5.1.73'

2、修正my.cnf

檢查一下mysqld上面有無datadir,假如沒有加上

[mysqld] 
datadir=/var/lib/mysql 

不加的話,復原數據的時刻,有能夠會湧現以下成績:

xtrabackup: Error: Please set parameter 'datadir'
innobackupex: fatal error: no 'mysqld' group in MySQL options
innobackupex: fatal error: OR no 'datadir' option in group 'mysqld' in MySQL options

3、全體數據庫備份與復原

1、全體數據庫備份


# innobackupex --defaults-file=/etc/my.cnf --user=root /home/tank/backup/ 

假如報以下毛病:


InnoDB: Error: log file ./ib_logfile0 is of different size 5242880 bytes
InnoDB: than specified in the .cnf file 50331648 bytes!
innobackupex: Error: The xtrabackup child process has died at /usr/bin/innobackupex line 2679.

處理方法:在my.cnf的mysqld中參加以下內容:


[mysqld] 
innodb_log_file_size = 5M 

2、雙數據庫備份


# innobackupex --defaults-file=/etc/my.cnf --user=root --database=backup_test /home/tank/backup/ 

3、數據庫備份並緊縮


# innobackupex --defaults-file=/etc/my.cnf --user=root --stream=tar  /home/tank/backup | gzip > /home/tank/backup/`date +%F_%H-%M-%S`.tar.gz 

4、全數據復原


# /etc/init.d/mysqld stop      //停失落mysql 
# mv /var/lib/mysql /var/lib/mysql_bak   //數據目次備份 
# mkdir -p /var/lib/mysql  //重建數據目次 
 
//--apply-log選項的敕令是預備在一個備份上啟動mysql辦事 
# innobackupex --defaults-file=/etc/my.cnf --user=root --apply-log /home/tank/backup/2014-09-18_16-35-12 
 
//--copy-back 選項的敕令從備份目次拷貝數據,索引,日記到my.cnf文件裡劃定的初始地位 
# innobackupex --defaults-file=/etc/my.cnf --user=root --copy-back /home/tank/backup/2014-09-18_16-35-12 
 
# chown -R mysql.mysql /var/lib/mysql  //轉變文件所屬 
# /etc/init.d/mysqld stop  //啟動mysql 

4、增量備份與復原

1、創立測試數據庫和表


create database backup_test;  //創立庫 
 
CREATE TABLE `backup` (  //創立表 
 `id` int(11) NOT NULL AUTO_INCREMENT , 
 `name` varchar(20) NOT NULL DEFAULT '' , 
 `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , 
 `del` tinyint(1) NOT NULL DEFAULT '0', 
 PRIMARY KEY (`id`) 
) ENGINE=myisam DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 

2、增量備份


mysql> INSERT INTO backup (name) VALUES ('tank'),('tank1');  //拔出數據 
 
# innobackupex --defaults-file=/etc/my.cnf --user=root --incremental-basedir=/home/tank/backup/2014-09-18_16-35-12 --incremental /home/tank/backup/ 

3、在增量的基本上在停止增量備份


mysql> INSERT INTO backup (name) VALUES ('tank2'),('tank3'),('tank4'),('tank5'),('tank6');  //在拔出數據 
 
//2014-09-18_18-05-20這個目次,前次增量備份發生的目次 
# innobackupex --defaults-file=/etc/my.cnf --user=root --incremental-basedir=/home/tank/backup/2014-09-18_18-05-20 --incremental /home/tank/backup/ 

檢查增量備份記載文件:


[root@localhost 2014-09-18_16-35-12]# cat xtrabackup_checkpoints   //全備目次下的文件 
backup_type = full-prepared 
from_lsn = 0             //全備肇端為0 
to_lsn = 23853959 
last_lsn = 23853959 
compact = 0 
 
[root@localhost 2014-09-18_18-05-20]# cat xtrabackup_checkpoints  //第一次增量備份目次下的文件 
backup_type = incremental 
from_lsn = 23853959 
to_lsn = 23854112 
last_lsn = 23854112 
compact = 0 
 
[root@localhost 2014-09-18_18-11-43]# cat xtrabackup_checkpoints  //第二次增量備份目次下的文件 
backup_type = incremental 
from_lsn = 23854112 
to_lsn = 23854712 
last_lsn = 23854712 
compact = 0 

增量備份做完後,把backup_test這個數據庫刪除失落,drop database backup_test;如許可以比較復原後。

4、增量復原


# innobackupex --defaults-file=/etc/my.cnf --user=root --apply-log --redo-only /home/tank/backup/2014-09-18_16-35-12 
 
# innobackupex --defaults-file=/etc/my.cnf --user=root --apply-log --redo-only /home/tank/backup/2014-09-18_16-35-12 --incremental-dir=/home/tank/backup/2014-09-18_18-05-20 
 
# innobackupex --defaults-file=/etc/my.cnf --user=root --apply-log --redo-only /home/tank/backup/2014-09-18_16-35-12 --incremental-dir=/home/tank/backup/2014-09-18_18-11-43 

在這裡有三個目次:

1)、/home/tank/backup/2014-09-18_16-35-12,全備份目次
2)、/home/tank/backup/2014-09-18_18-05-20,第一次增量備份發生的目次
3)、/home/tank/backup/2014-09-18_18-11-43,第二次增量備份發生的目次

到這裡增量復原,還沒有停止,還有最主要一步,就是要停止一次全量復原。停滯數據庫,刪除/var/lib/mysql,在復原。

增量備份的道理就是,把增量目次下的數據,整合到全變量目次下,然後在停止,全數據量的復原。

整體來講,innobackupex速度快,支撐innodb,myisam,用起來是還不是很便利,單庫復原,照樣增量備份復原,都要停止全體數據庫復原,這個不公道。

5、innobackup 經常使用參數解釋

--defaults-file
同xtrabackup的--defaults-file參數

--apply-log
對xtrabackup的--prepare參數的封裝

--copy-back
做數據恢復時將備份數據文件拷貝到MySQL辦事器的datadir ;

--remote-host=HOSTNAME
經由過程ssh將備份數據存儲到過程辦事器上;

--stream=[tar]
備 份文件輸入格局, tar時應用tar4ibd , 該文件可在XtarBackup binary文件中取得.假如備份時有指定--stream=tar, 則tar4ibd文件所處目次必定要在$PATH中(由於應用的是tar4ibd去緊縮, 在XtraBackup的binary包中可取得該文件)。
在 應用參數stream=tar備份的時刻,你的xtrabackup_logfile能夠會暫時放在/tmp目次下,假如你備份的時刻並發寫入較年夜的話 xtrabackup_logfile能夠會很年夜(5G+),極可能會撐滿你的/tmp目次,可以經由過程參數--tmpdir指定目次來處理這個成績。

--tmpdir=DIRECTORY
當有指定--remote-host or --stream時, 事務日記暫時存儲的目次, 默許采取MySQL設置裝備擺設文件中所指定的暫時目次tmpdir

--redo-only --apply-log組,
強迫備份日記時只redo ,跳過rollback。這在做增量備份時異常需要。

--use-memory=#
該參數在prepare的時刻應用,掌握prepare時innodb實例應用的內存量

--throttle=IOS
同xtrabackup的--throttle參數
--sleep=是給ibbackup應用的,指定每備份1M數據,進程停滯拷貝若干毫秒,也是為了在備份時盡可能減小對正常營業的影響,詳細可以檢查ibbackup的手冊 ;

--compress[=LEVEL]
對備份數據迚行緊縮,僅支撐ibbackup,xtrabackup還沒有完成;

--include=REGEXP
對 xtrabackup參數--tables的封裝,也支撐ibbackup。備份包括的庫表,例如:--include="test.*",意思是要備份 test庫中一切的表。假如須要全備份,則省略這個參數;假如須要備份test庫下的2個表:test1和test2,則寫 成:--include="test.test1|test.test2"。也能夠應用通配符,如:--include="test.test*"。

--databases=LIST
列出須要備份的databases,假如沒有指定該參數,一切包括MyISAM和InnoDB表的database都邑被備份;

--uncompress
解壓備份的數據文件,支撐ibbackup,xtrabackup還沒有完成該功效;

--slave-info,
備 份從庫, 加上--slave-info備份目次下會多生成一個xtrabackup_slave_info 文件, 這裡會保留主日記文件和偏移, 文件內容相似於:CHANGE MASTER TO MASTER_LOG_FILE='', MASTER_LOG_POS=0

--socket=SOCKET
指定mysql.sock地點地位,以便備份過程登錄mysql.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved