Xtrabackup數據庫備份工具

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Xtrabackup

官方原理

在InnoDB內部會維護一個redo日志文件,我們也可以叫做事務日志文件。事務日志會存儲每一個InnoDB表數據的記錄修改。當InnoDB啟動時,InnoDB會檢查數據文件和事務日志,并執行兩個步驟:它應用(前滾)已經提交的事務日志到數據文件,并將修改過但沒有提交的數據進行回滾操作。

Xtrabackup在啟動時會記住log sequencenumber(LSN),并且復制所有的數據文件。復制過程需要一些時間,所以這期間如果數據文件有改動,那么將會使數據庫處于一個不同的時間點。這時,xtrabackup會運行一個后臺進程,用于監視事務日志,并從事務日志復制最新的修改。Xtrabackup必須持續的做這個操作,是因為事務日志是會輪轉重復的寫入,并且事務日志可以被重用。所以xtrabackup自啟動開始,就不停的將事務日志中每個數據文件的修改都記錄下來。

上面就是xtrabackup的備份過程。接下來是準備(prepare)過程。在這個過程中,xtrabackup使用之前復制的事務日志,對各個數據文件執行災難恢復(就像mysql剛啟動時要做的一樣)。當這個過程結束后,數據庫就可以做恢復還原了。

以上的過程在xtrabackup的編譯二進制程序中實現。程序innobackupex可以允許我們備份MyISAM表和frm文件從而增加了便捷和功能。Innobackupex會啟動xtrabackup,直到xtrabackup復制數據文件后,然后執行FLUSH TABLES WITH READ LOCK來阻止新的寫入進來并把MyISAM表數據刷到硬盤上,之后復制MyISAM數據文件,最后釋放鎖。

備份MyISAM和InnoDB表最終會處于一致,在準備(prepare)過程結束后,InnoDB表數據已經前滾到整個備份結束的點,而不是回滾到xtrabackup剛開始時的點。這個時間點與執行FLUSH TABLES WITH READ LOCK的時間點相同,所以myisam表數據與InnoDB表數據是同步的。類似oracle的,InnoDB的prepare過程可以稱為recover(恢復),myisam的數據復制過程可以稱為restore(還原)。

Xtrabackup和innobackupex這兩個工具都提供了許多前文沒有提到的功能特點。手冊上有對各個功能都有詳細的介紹。簡單介紹下,這些工具提供了如流(streaming)備份,增量(incremental)備份等,通過復制數據文件,復制日志文件和提交日志到數據文件(前滾)實現了各種復合備份方式。

Xtrabackup有兩個主要的工具:xtrabackup、innobackupex

1、xtrabackup只能備份InnoDB和XtraDB兩種數據表,而不能備份MyISAM數據表

2、innobackupex-1.5.1則封裝了xtrabackup,是一個腳本封裝,所以能同時備份處理innodb和myisam,但在處理myisam時需要加一個讀鎖

安裝

官網下載

#wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.4/source/tarball/percona-xtrabackup-2.4.4.tar.gz

下載安裝所需依賴包,從MySQL?5.7.5開始Boost庫是必需的

#wget?http://downloads.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz

#yum install cmake gcc gcc-c++ libaiolibaio-devel automake autoconf bzr bison libtool ncurses-devel libgcrypt-devellibcurl-devel libev-devel python-sphinx perl-Digest-MD5 perl-DBD-MySQL -y

#cp percona-xtrabackup-2.4.4.tar.gz/usr/local/src/

#cp boost_1_59_0.tar.gz /usr/local/src/

#cd /usr/local/src/

#tar zxf boost_1_59_0.tar.gz

安裝xtrabackup

#tar zxf percona-xtrabackup-2.4.4.tar.gz

#cd percona-xtrabackup-2.4.4

#cmake -DBUILD_CONFIG=xtrabackup_release-DDOWNLOAD_BOOST=1 -DWITH_BOOST=../boost_1_59_0

#make -j4

#make install

#ln -s/usr/local/xtrabackup/bin/innobackupex /usr/bin/

#ln -s /usr/local/xtrabackup/bin/xtrabackup/usr/bin/

常用選項:

--defaults-file ? ? ? ?#數據庫的配置文件路徑

--apply-log ? ? ? ? ? #準備在一個備份上啟動mysql服務。

--copy-back ? ? ? ? ? #從備份目錄拷貝數據,索引,日志到my.cnf文件里規定的初始位置。

--no-timestamp ? ? ? ? #創建備份時不自動生成時間目錄,可以自定義備份目錄名例如:/backups/mysql/base

--databases ? ? ? ? ?#用于指定要備份的數據庫,多個庫文件使用方法: “database1 database2″

--incremental ? ? ? ? #在全備份的基礎上進行增量備份,后跟增量備份存貯目錄路徑

--incremental-basedir=DIRECTORY ? ?#增量備份所需要的全備份路徑目錄或上次做增量備份的目錄路徑

--incremental-dir=DIRECTORY ? ? ? #增量備份存貯的目錄路徑

--redo-only ? ? ? ? ? ? ? ? #用于準備增量備份內容把數據合并到全備份目錄,配合incremental-dir增量備份目錄使用。

--force-non-empty-directories ? ? #如果是特定庫備份還原,不需要刪掉整個mysql目錄,只是特定庫的及相關文件就可以,還原時加上此參數就不會報錯。

備份

完全備份

#innobackupex--defaults-file=/data/mysql/data3307/my.cnf --user=root --password=123456--socket=/data/mysql/data3307/mysql.sock?/back/full/

--host:指定備份服務器IP

--defaults-file:指定數據庫配置文件

--user=root:備份用戶

--password=123456:備份用戶密碼

--socket=/data/mysql/data3307/mysql.sock:指定sock文件

/back/full:數據庫完全備份目錄

增量備份

進行第一次增量備份,需要在有一次完整備份的基礎上進行

#innobackupex--defaults-file=/data/mysql/data3307/my.cnf --user=root --password=123456--socket=/data/mysql/data3307/mysql.sock --incremental /back/incre/ --incremental-basedir=/back/full/2016-07-28_01-46-28/

--incremental /back/incre:指定這次增量備份存放目錄

--incremental-basedir=/back/full/2016-07-28_01-46-28:指定完整備份存放目錄

進行第二次增量備份

#innobackupex --defaults-file=/data/mysql/data3307/my.cnf--user=root --password=123456 --socket=/data/mysql/data3307/mysql.sock--incremental /back/incre/? --incremental-basedir=/back/incre/2016-07-28_01-50-41/

--incremental /back/incre:指定這次增量備份存放目錄

--incremental-basedir=/back/incre/2016-07-28_01-50-41:指定是第一個增量備份目錄為參考點進行增量備份

以此類推。。。

數據恢復

完全備份恢復

#/etc/init.d/mysql3307 stop

#innobackupex --user=root --password=123456--socket=/data/mysql/data3307/mysql.sock --apply-log --use-memory=100M /back/full/2016-08-08_00-46-06/

#mv /data/mysql/data3307? /data/mysql/data3307.bak

#mkdir –p /data/mysql/data3307

#innobackupex --user=root --password=123456--socket=/data/mysql/data3307/mysql.sock --copy-back--datadir=/data/mysql/data3307 /back/full/2016-08-08_00-46-06/

#cp /data/mysql/data3307.bak/my.cnf? /data/mysql/data3307/

#chown –R mysql.mysql /data/mysql/data3307

#/etc/init.d/mysql3307 start

增量備份恢復

停止mysql

#/etc/init.d/mysql3307 stop

應用完全備份

#innobackupex --user=root --password=123456--socket=/data/mysql/data3307/mysql.sock --apply-log --use-memory=100M --redo-only/back/full/2016-08-08_00-46-06/

將第一次增量備份應用到完全備份上

#innobackupex --user=root --password=123456--socket=/data/mysql/data3307/mysql.sock --apply-log --use-memory=100M --redo-only/back/full/2016-08-08_00-46-06/ --incremental-dir=/back/incre/2016-07-28_01-46-28/

將第二次增量備份應用到完全備份上

#innobackupex --user=root --password=123456--socket=/data/mysql/data3307/mysql.sock --apply-log --use-memory=100M --redo-only?/back/full/2016-08-08_00-46-06/ --incremental-dir=/back/incre/2016-07-28_01-50-41/

以此類推。。。最后一個增量庫不加–redo-only選項

創建mysql數據目錄

#mv /data/mysql/data3307/data/mysql/data3307.bak

#mkdir /data/mysql/data3307

將完全備份恢復到數據庫中

#innobackupex --user=root --password=123456--socket=/data/mysql/data3307/mysql.sock --copy-back --datadir=/data/mysql/data3307/back/full/2016-08-08_00-46-06/

啟動mysql

#cp data3307.bak/my.cnf data3307/

#chown -R mysql.mysql data3307

#/etc/init.d/mysql3307 start

查看數據是否恢復

備份的文件說明

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

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

#cat xtrabackup_checkpoints

backup_type = full-backuped??????? #注明這是全備

from_lsn = 0????????????????? #全備的lsn起始號

to_lsn = 2026561686???????????? #全備記錄到的最大序列號

last_lsn = 2026562643?????????? #全備完成后當前的日志序列號

compact = 0????????????????? #注明沒有進行打包

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

#cat xtrabackup_binlog_info

mysql-bin.0000011371180-1-175

(3)backup-my.cnf ――備份命令用到的配置選項信息和備份無關的不會記錄,備份配置文件的話需要單獨備份。

#cat backup-my.cnf

# This MySQL options file was generated byinnobackupex.

# The MySQL server

[mysqld]

innodb_checksum_algorithm=innodb

innodb_log_checksum_algorithm=innodb

innodb_data_file_path=ibdata1:12M:autoextend

innodb_log_files_in_group=2

innodb_log_file_size=50331648

innodb_fast_checksum=false

innodb_page_size=16384

innodb_log_block_size=512

innodb_undo_directory=.

innodb_undo_tablespaces=0

server_id=1

redo_log_version=0

(4)xtrabackup_info ――記錄了mariadb的版本信息和一些屬性信息,還原是檢測版本匹配度時用到。

#cat xtrabackup_info

uuid = cda678f9-4dde-11e6-9906-0050562d6ff0

name =

tool_name = innobackupex

tool_command =--defaults-file=/data/mysql/data3307/my.cnf --use-memory=4G --user=root--password=... --port=3307 --socket=/data/mysql/data3307/mysql.sock --incremental/back/dump/incre/2016-07-20_02-28-40 --incremental-basedir/back/dump/incre/2016-07-20_02-28-40/2016-07-20_02-29-12

tool_version = 2.4.4

ibbackup_version = 2.4.4

server_version = 10.1.14-MariaDB

start_time = 2016-07-20 02:29:58

end_time = 2016-07-20 02:30:00

lock_time = 0

binlog_pos = filename 'master-bin.000031',position '1532', GTID of the last change '0-1-4383'

innodb_from_lsn = 1729763

innodb_to_lsn = 1735728

partial = N

incremental = Y

format = file

compact = N

compressed = N

encrypted = N

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,698評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,202評論 3 426
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,742評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,580評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,297評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,688評論 1 327
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,693評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,875評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,438評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,183評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,384評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,931評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,612評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,022評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,297評論 1 292
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,093評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,330評論 2 377

推薦閱讀更多精彩內容