




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、老男孩 linux 運維班學生技術-王玉曉一、Xtrabackup 介紹A、Xtrabackup 是什么Xtrabackup 是一個對 InnoDB 做數據備份的工具,支持熱備份(備份時不影響數據讀寫),是商業備份工具 InnoDBHotbackup 的一個很好的替代品。Xtrabackup 有兩個主要的工具:xtrabackup、innobackupex1、xtrabackup 只能備份 InnoDB 和 XtraDB 兩種數據表,而不能備份 MyISAM 數據表2、innobackupex 是參考了 InnoDB Hotbackup 的 innoback修改而來的.innobackupex
2、 是一個 perl封裝,封裝了 xtrabackup。主要是為了方便的同時備份 InnoDB 和 MyISAM 引擎的表,但在處理 myisam 時需要加一個讀鎖。并且加入了一些使用的選項。如 slave-info 可以備份恢復后,作為 slave 需要的一些信息,根據這些信息,可以很方便的利用備份來重做 slave。學無止境,老男孩教育成就你人生的起點!3、文檔:Xtrabackup 的特點:特點XtraBackupMySQL 企業備份(InnoDB 熱備份)證GPL所價格5000 元服務器開源是的非阻塞 InnoDB 的備份1是的是的阻塞的 MyISAM 備份是的是的增量備份是的是的全壓縮
3、的備份是的是的增量壓縮備份是的快速增量備份2是的增量備份與歸檔日志是的加密備份是的是的數據流備份是的是的平行本地備份是的是的并行數據流備份是的并行壓縮是的是的并行加密是的是的部分備份是的是的單獨的表導出是的是的表恢復到不同的服務器7是的是的數據和索引文件的統計數據是的InnoDB 的索引碎片整理是的rsync 的支持,以盡量減少鎖定時間是的B、Xtrabackup 可以做什么(熱)備份整個庫的 InnoDB、 XtraDB 表在 xtrabackup 的上一次整庫備份基礎上做增量備份(innodb only)以流的形式產生備份,可以直接保存到上(本機硬盤空間不足時很有用)MySQL 數據庫本身
4、提供的工具并不支持真正的增量備份,二進制日志恢復是 point-in-time(時間點)的恢復而不是增量備份。Xtrabackup 工具支持對 InnoDB引擎的增量備份,工作原理如下:(1)首先完成一個完全備份,并下此時檢查點的 LSN(Log Sequence Number)。(2)在進程增量備份時,比較表空間中每個頁的 LSN 是否大于上次備份時的 LSN,如果是,則備份該頁,同時當前檢查點的 LSN。首先,在 logfile 中找到并最后一個 checkpoint(“last checkpoint LSN”),然后開始從 LSN 的位置開始拷貝 InnoDB 的 logfile 到xt
5、rabackup_logfile;接著,開始拷貝全部的數據文件.ibd;在拷貝全部數據文件結束之后,才停止拷貝 logfile。因為 logfile 里面全部的數據修改情況,所以,即時在備份過程中數據文件被修改過了,恢復時仍然能夠通過xtrabackup_logfile 保持數據的一致。C、Xtrabackup 備份原理XtraBackup 基于 InnoDB 的 crash-recovery 功能。它會innodb 的 data file,由于不鎖表,出來的數據是不一致的,在恢復的時候使用crash-recovery,使得數據恢復一致。InnoDB 維護了一個 redo log,又稱為 tr
6、ansaction log,事務日志,它包含了 innodb 數據的所有改動情況。當 InnoDB 啟動的時候,它會先去檢查 data file 和 transaction log,并且會做二步操作:XtraBackup 在備份的時候, 一頁一頁地innodb 的數據,而且不鎖定表,與此同時,XtraBackup 還有另外一個線程監視著 transactions log,一旦 log 發生變化,就把變化過的 log pages走。為什么要急著走呢? 因為 transactions log 文件大小有限,寫滿之后,就會從頭再開始寫,所以新數據可能會覆蓋到舊的數據。在 prepare 過程中,Xt
7、raBackup 使用到的 transactions log 對備份出來的 innodb data file 進行 crash recovery。原理在 InnoDB 內部會維護一個 redo 日志文件,我們也可以叫做事務日志文件。事務日志會每一個 InnoDB 表數據的修改。當 InnoDB 啟動 時,InnoDB 會檢查數據文件和事務日志,并執行兩個步驟:它應用(前滾)已經提交的事務日志到數據文件,并將修改過但沒有提交的數據進行回滾操作。Xtrabackup 在啟動時會記住 log sequence number(LSN),并且所有的數據文件。過程需要一些時間,所以這期間如果數據文件有改動
8、,那么將會使數據庫處于一個不同的時間點。這 時,xtrabackup 會運行一個進程,用于監視事務日志,并從事務日志最新的修改。Xtrabackup必須持續的做這個操作,是因為事務日 志是會輪轉重復的寫入,并且事務日志可以被重用。所以 xtrabackup 自啟動開始,就不停的將事務日志中每個數據文件的修改都下來。上面就是 xtrabackup 的備份過程。接下來是準備(prepare)過程。在這個過程中,xtrabackup 使用之前的事務日志,對各個數據文件執行恢復(就像 mysql 剛啟動時要做的一樣)。當這個過程結束后,數據庫就可以做恢復還原了。以 上的過程在 xtrabackup 的
9、編譯二進制程序中實現。程序 innobackupex 可以我們備份 MyISAM 表和 frm 文件從而增加了便捷和功 能。Innobackupex 會啟動xtrabackup,直到 xtrabackup數據文件后,然后執行 FLUSH TABLES WITH READ LOCK 來新的寫入進來并把 MyISAM表數據刷到硬盤上,之后MyISAM 數據文件,最后鎖。備 份 MyISAM 和 InnoDB 表最終會處于一致,在準備(prepare)過程結束后,InnoDB 表數據已滾到整個備份結束的點,而不是回滾到 xtrabackup剛開始時的點。這個時間點與執行 FLUSH TABLES W
10、ITH READ LOCK 的時間點相同,所以 myisam 表數據與 InnoDB 表數據是同步的。類似 oracle 的,InnoDB 的 prepare 過程可以稱為 recover(恢復),myisam 的數據過程可以稱為 restore(還原)。Xtrabackup 和 innobackupex 這兩個工具都提供了許多前文沒有提到的功能特點。手冊上有對各個功能都有詳細的介紹。簡單介紹下,這些工具提供了如流 (streaming)備份,增量(incremental)備份等,通過數據文件,日志文件和提交日志到數據文件(前滾)實現了各種復合備份方 式。D、實現細節XtraBackup 以
11、read-write 模式打開 innodb 的數據文件,然后對其進行。其實它修改此文件。也就是說,運行 XtraBackup 的用戶,必須對 innodb 的數據文件具有讀寫權限。之所以采用 read-write 模式是因為 XtraBackup 采用了其內置的 innodb 庫來打開文件,而 innodb 庫打開文件的時候就是 rw 的。XtraBackup 要從文件系統中大量的數據,所以它盡可能地使用 posix_fadvise(),來告訴 OS 不要緩存到的數據,從而提升性能。因為這些數據重用到了,OS 卻沒有這么聰明。如果要緩存一下的話,幾個G 的數據,會對 OS 的虛擬內存造成很大
12、的,其它進程,比如 mysqld 很有可能被 swap 出去,這樣系統就會受到很大影響了。在備份 innodb page 的過程中,XtraBackup 每次讀寫 1MB 的數據,1MB/16KB=64 個 page。這個不可配置。讀 1MB 數據之后,XtraBackup一頁一頁地遍歷這 1MB 數據,使用 innodb 的 buf_page_is_corrupted()函數檢查此頁的數據是否正常,如果數據不正常,就重新這一頁,最多重新10 次,如果還是失敗,備份就失敗了,。在transactions log 的時候,每次讀寫 512KB 的數據。同樣不可以配置。E、應用場景基于以上原理,x
13、trabackup 備份恢復工具比較適合數據增長型數據庫。對于數據增長型的庫,由于數據的增長導致數據備份和恢復的空間和時間上的較大。而 xtrabackup 有增量備份的功能,在短時間內可以通過進行增量備份來保證數據的安全性。而長期來看,仍然需要間斷性的進行全庫備份。此外,由于 xtrabackup 對 innodb 的數據庫不進行鎖定,因此對要求不影響線上服務的數據備份和恢復較適合。而對于數據量無明顯增長,且更新為主的數據更新型數據庫,xtrabackup 顯得過于復雜。xtrabackup 操作反而不如 mysqldump 的性能高。F、XtraBackup 優勢 :個人理解:1、無需停止
14、數據庫進行 InnoDB 熱備,快速、可靠的完成備份2.備份期間不間斷事務處理3.節省磁盤空間和網絡帶寬4.自動對備份文件進行驗證5.快速恢復,保障運行時間持久性說明:1.在不停庫的情況下,對 InnoDB 數據庫進行熱備2.增量備份 MySQL 數據庫3.通過流壓縮備份 MySQL 數據到另外一臺服務器4.MySQL 服務器之間進行表空間遷移軟件包地址:舊版本:最新穩定版:XTRABACKUP 的安裝及測試安裝前準備:rootxtrabackup # cat /etc/redhat-release CentOS release 6.4 (Final)rootxtrabackup # unam
15、e -rm2.6.32-358.el6.x86_64 x86_64安裝所需要的庫安裝步驟:cd /hols/ wgettar xf percona-xtrabackup-2.1.9.tar.gz cd percona-xtrabackup-2.1.9 utils/build.sh innodb55echo $?cd .yum install cmake gcc gcc-c+ libaio libaio-devel automake autoconf bzr bison libtool ncurses-devel zlib-devel libgcrypt-develperl-ExtUtils-M
16、akeMaker perl-DBD-MySQL.* perl-Time-HiRes-yrootxtrabackup #測試數據建庫:create database test2建庫:create database ceshi;建表:create table users (id int primary key auto_increment,name varchar(20) not null unique,password varchar(100) not null,address varchar(200)ENGINE=MyISAM;添數據:insert into users (id,name,pa
17、ssword,address) values (1,'zhang','1234',null),(2,'wang','4321',''), (3,'li','5678','北京海淀');mv /hols/percona-xtrabackup-2.1.9 /application/percona-xtrabackup-2.1.9 ln -s /application/percona-xtrabackup-2.1.9 /application/percona-xtrabac
18、kupcp /application/percona-xtrabackup/innobackupex /usr/bin/innobackupexcp /application/percona-xtrabackup/src/xtrabackup_innodb55 /usr/bin/xtrabackup_55 cp /application/percona-xtrabackup/src/xbstream /usr/bin/xbstreamXTRABACKUP 的測試#=全庫備份與恢復操作過程=#創建備份目錄:#全庫備份(All DB)mkdir -p /backup/full_data,dk_da
19、ta,zl_data 注:full_data 全庫備份目錄dk_data 單庫備份目錄zl_data 增量備份目錄建表:create table articles (id int primary key auto_increment,content longtext not null)NGINE=InnoDB;添數據:insert into articles (id,content) values (11,'hahahahahaha'),(12,'xixixixixix'),(13,'aiaiaiaia'),(14,'hohoahaoao
20、oo');備份用法說明:恢復用法說明:全庫備份操作步驟:第一步:執行備份全庫命令注:-defaults-file : 默認配置文件的路徑, 如果不該參數, xtrabackup 將從依次從以下位置查找配置文件/etc/f 、/etc/mysql/f 、rootxtrabackup # innobackupex -defaults-file=/data/3306/f -user=root -password=123456/backup/full_data用法一:$ innobackupex -apply-log /path/to/BACKUP-DIR用法二:$ innobackupex
21、-apply-log -use-memory=4G /path/to/BACKUP-DIR注:-use-memory=4G 該參數在 prepare 的時候使用,prepare 時innodb 實例使用的內存量$ innobackupex -defaults-file=/tmp/other-f -user=DBUSER -password=DBUSERPASS /path/to/BACKUP-DIR/第二步:恢復準備:第三步:停庫:rootxtrabackup # /data/3306/mysql stoprootxtrabackup#innobackupex-defaults-file=/d
22、ata/3306/f-user=root-password=123456-apply-log/backup/full_data/2014-05-30_11-27-20/usr/local/etc/f、/f,并配置文件中的mysqld和xtrabackup配置段。mysqld中只需要指定 datadir、innodb_data_home_dir、 innodb_data_file_path、innodb_log_group_home_dir、innodb_log_files_in_group、innodb_log_file_size6 個參數即可讓 xtrabackup 正常工作。-user:的
23、數據庫用戶-password:數據庫用戶的-target-dir=name 備份文件的存放目錄路徑(即:/backup/full_data )第四步:把備份文件拷貝至原數據目錄下并第五步:重啟數據庫第六步:查看數據:mysql> show databases ; mysql> use test;mysql> show tables;mysql> select * from users;rootxtrabackup # /data/3306/mysql startrootxtrabackup # rm -fr /data/3306/data/*rootxtrabackup
24、 # cp -ap /backup/full_data/2014-05-30_11-27-20/* /data/3306/data/ rootxtrabackup # chown -R mysql.mysql /data/3306/data#=單庫增量備份與恢復操作過程=#單庫備份跟全庫用法是一樣的,只不過單庫在備份里,要指定要備份的數據庫名,即:-databases=LIST全量備份:注:如果是備份從庫的話,需要添加參數:-slave-info,即:恢復單庫操作步驟:rootxtrabackup # innobackupex -defaults-file=/data/3307/f -user
25、=root -password=123456 -slave-info -database=test3/tmprootxtrabackup#innobackupex-defaults-file=/data/3306/f-user=root-password=123456-database=test3/backup/dk_data1)關閉數據庫2)恢復日志文件apply-log3)把備份文件拷貝至原數據目錄下推薦方法:方法(放棄):innobackupex -defaults-file=/data/3306/f -user=root -password=123456 -copy-back /bac
26、kup/dk_data/2014-05-30_11-27-20 (用這種方報錯,它屬于的一個 BUG)rootxtrabackup # cp -ap /backup/dk_data/2014-05-30_11-27-20/test3 /data/3306/data/rootxtrabackup # innobackupex -defaults-file=/data/3306/f -user=root -password=123456 -apply-log (-use-memory=4G可選)/backup/dk_data/2014-05-30_11-27-20rootxtrabackup #
27、/data/3306/mysql stop4)檢查數據目錄的所有者和權限是否正確5)重啟 mysql6)檢查數據mysql> show databases like '%test3' mysql> use test3;mysql> show tables; mysql> select * from users;mysql> show create table usersGrootxtrabackup # /data/3306/mysql startrootxtrabackup # chown -R mysql:mysql /data/3306/da
28、ta/test3#=單庫增量備份與恢復操作過程=#操作過程:1)首先對單庫執行一次全備:2)對單庫進行增量備份rootxtrabackup # innobackupex -user=root -password=123456 -defaults-file=/data/3306/f -database=test3-incremental-incremental-basedir=/backup/dk_data/2014-05-30_23-26-22/backup/zl_datarootxtrabackup#innobackupex-user=root-password=123456-default
29、s-file=/data/3306/f-databases=test3/backup/dk_data增量的恢復1)關閉數據庫2)恢復全備份日志文件(回滾未完成的日志):rootxtrabackup#innobackupex-user=root-password=123456-defaults-file=/data/3306/f-apply-log-redo-only/backup/data/2014-05-30_11-56-51rootxtrabackup # /data/3306/mysql stop注:-incremental 指備份類型為增量備份,做增量備份之前首先要做一次全量備份,所以
30、-incremental-basedir=/backup/dk_data/2014-05-30_23-26-22的目錄 就是-incremental-basedir=BASEDIR/backup/zl_data 就是 -incremental-basedir=INCREMENTAL-DIR-1INCREMENTAL-DIR-1 是指第一次的增量備份,INCREMENTAL-DIR-2 是指第二次的增量備份,以此類推。3)恢復增量備份日志文件4)恢復增量備份數據文件(拷貝數據)推薦用法:rootxtrabackup # cp /backup/dk_data/2014-05-30_11-56-51
31、 /data/3306/data/test3rootxtrabackup#innobackupex-user=root-password=123456-defaults-file=/data/3306/f-apply-log-redo-only/backup/dk_data/2014-05-30_11-56-51 -incremental-dir=/backup/zl_data/2014-05-31_03-01-33注:其中 BASE-DIR 是指全備目錄,INCREMENTAL-DIR-1 是指第一次的增量備份,INCREMENTAL-DIR-2 是指第二次的增量備份,以此類推。BASE-D
32、IR:/backup/dk_data/2014-05-30_11-56-51INCREMENTAL-DIR-1:/backup/zl_data/2014-05-31_03-01-33以上語句執行之后,最終數據在 BASE-DIR(即全備目錄)下。加選項:-apply-log-only 作用是:只應用 redo log,不對數據的 rollback,起到先合并事務日志#用法:(丟棄)innobackupex -user=root -password=123456 -defaults-file=/data/3306/f -copy-back /backup/data/2014-05-30_11-5
33、6-515)6)啟動數據庫略7)檢查數據略=壓縮備份=壓縮備份:xbstream 打包:rootxtrabackup # chown -R mysql.mysql /data/3306/dataxbstream 壓縮方法:tar 壓縮方法:xbstream 解壓備份方法:rootxtrabackup # xbstream -x <backup.xbstream -C /tmp/backup/rootxtrabackup # innobackupex -user=root -password=123456 -defaults-file=/data/3306/f -databases=&qu
34、ot;ceshi test3"-stream=tar /backup/data/ | gzip >/backup/data/test_ceshi.$(date +%Y%m%d-%H%M%S).tar.gzrootxtrabackup # innobackupex -stream=xbstream -compress -user=root -password=123456 -defaults-file=/data/3306/f-databases="ceshi test3" /backup/data/yasuo/ > /backup/data/yasuo
35、/backup.xbstreamrootxtrabackup # mkdir /backup/data/yasuo -prootxtrabackup#innobackupex-stream=xbstream-user=root-password=123456-defaults-file=/data/3306/f-databases="ceshi test3" /backup/data/yasuo/ > /backup/data/yasuo/backup.xbstream 注:-databases 可以同時備份多個庫,我這里同時備份兩個庫即:ceshi 和 test3
36、庫Tar 解壓備份方法:備份到遠端的方法:#=xtrabackup 的參數選項及說明=#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-DIRrootxtrabacku
37、p # innobackupex -compress -stream=xbstream /root/backup/ | ssh oldboy23 "xbstream -x -C/root/backup/"rootxtrabackup # tar -izxvf test_ceshi.2014-05-30_11-56-51.tar.gz -C /tmp/backup/innobackup -apply-log -use-memory=MB -uncompress -defaults-file=MY.CNF -ibbackup=IBBACKUP-BINARY
38、 BACKUP-DIR-redo-only -apply-log 組, 強 份日志時只 redo ,跳過 rollback。這在做增量備份時非常必要。-slave-info, 備份從庫, 加上-slave-info 備份目錄下會多生成一個 xtrabackup_slave_info 文件, 這里會保存 志文件以及偏移, 文件內容類似于:CHANGE MASTER TO MASTER_LOG_FILE='', MASTER_LOG_POS=0no-lock 參數用于指定備份時不鎖定表-defaults-file 同 xtrabackup 的-defaults-file 參數-ap
39、ply-log 對 xtrabackup 的-prepare 參數的封裝-copy-back 做數據恢復時將備份數據文件拷貝到 MySQL 服務器的datadir ;-remote-host=HOSTNAME 通過 ssh 將備份數據 到進程服務器上;-stream=tar 備份文件輸出格式, tar 時使用 tar4ibd , 該文件可在 XtarBackup binary 文件中獲得.如果備份時有指定-stream=tar, 則 tar4ibd 文件所處目錄一定要在$PATH 中(因為使用的是 tar4ibd 去壓縮, 在 XtraBackup 的 binary 包中可獲得該文件)。在使用
40、參數 stream=tar 備份的時候,你的 xtrabackup_logfile 可能會臨時放在/tmp 目錄下,如果你備份的時候并發寫入較大的話 xtrabackup_logfile 可能會很大(5G+),很可能會撐滿你的/tmp 目錄,可以通過參數-tmpdir 指定目錄來解決這個問題。-tmpdir=DIRECTORY當有指定-remote-host or -stream 時, 事務日志臨時的目錄, 默認采用 MySQL 配置文件中所指定的臨時目錄tmpdir-use-memory=#該參數在 prepare 的時候使用,prepare 時 innodb 實例使用的內存量-thrott
41、le=IOS同xtrabackup 的-throttle 參數-sleep=是給 ibbackup 使用的,指定每備份 1M 數據,過程停止拷貝多少毫秒,也是為了在備份時盡量減小對正常業務的影響,具體可以查看 ibbackup的手冊 。-compress=LEVEL對備份數據迚行壓縮,僅支持 ibbackup,xtrabackup 還沒有實現。-uncompress解壓備份的數據文件,支持 ibbackup,xtrabackup 還沒有實現該功能;-include=REGEXP對 xtrabackup 參數-tables 的封裝,也支持 ibbackup。備份包含的庫表,例如:-include="test.*",意思是要備份 test 庫中所有的表。如果需要全備份,則省略這個參數;如果需要備份 test 庫下的 2 個表:test1 和test2,則寫成:-include="test.test1|test.test2"。也可以使用通配符,如:-include="test.test*"。-databases=LIST列出需要備份的 datab
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 呼和浩特市新城區公益性崗位招聘筆試真題2024
- 江蘇蘇州工業園區教育系統招聘教育人才筆試真題2024
- 歷史城市文化傳承規劃基礎知識點歸納
- 極地地區教學設計
- 綠色金融產融合作中面臨的主要問題及挑戰
- 高效行政工作總結
- 高中生物跨學科教學中探究式學習的實施策略
- 發心理學論文
- 2025至2030年中國濾波器用鐵氧體磁芯行業投資前景及策略咨詢報告
- 2025至2030年中國滌棉全線卡行業投資前景及策略咨詢報告
- 糧油食材配送投標方案(大米食用油食材配送服務投標方案)(技術方案)
- 創業基礎學習通超星期末考試答案章節答案2024年
- DB3301∕T 65.28-2024 反恐怖防范系統管理規范 第28部分:硬質隔離設施
- 三年級道德與法治下冊 第一單元 我和我的同伴 4同學相伴教案 新人教版
- 傳統紋樣課程設計
- 便利店門店運營與管理實務考核試卷
- 光伏發電工程建設標準工藝手冊(2023版)
- 江西省贛州市2024-2025學年高一物理下學期期末考試試題
- 2024版燈具安裝勞務合同范文
- 2024研學旅行合同書
- 咖啡的微觀世界智慧樹知到期末考試答案章節答案2024年成都師范學院
評論
0/150
提交評論