溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

xtrabackup如何實(shí)現(xiàn)MySQL自動(dòng)備份恢復(fù)

發(fā)布時(shí)間:2021-10-27 16:49:32 來源:億速云 閱讀:203 作者:小新 欄目:MySQL數(shù)據(jù)庫

這篇文章主要介紹了xtrabackup如何實(shí)現(xiàn)MySQL自動(dòng)備份恢復(fù),具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

1. xtrabackup原理

1.1 xtrabackup簡介

XtraBackup(PXB) 工具是 Percona 公司用 perl 語言開發(fā)的一個(gè)用于 MySQL 數(shù)據(jù)庫物理熱備的備份工具,支持 MySQl(Oracle)、Percona Server 和 MariaDB,并且全部開源,真可謂是業(yè)界良心。阿里的 RDS MySQL 物理備份就是基于這個(gè)工具做的。由于是采取物理拷貝的方式來做的備份,所以速度非???,幾十G數(shù)據(jù)幾分鐘就搞定了,而它巧妙的利用了mysql 特性做到了在線熱備份,不用像以前做物理備份那樣必須關(guān)閉數(shù)據(jù)庫才行,直接在線就能完成整庫或者是部分庫的全量備份和增量備份。新版本的xtrabackup改成了cmake安裝,和以前有點(diǎn)不一樣。

版本說明:這里安裝的版本是2.4.6,而2.3.3之后不備份死鎖了,如果數(shù)據(jù)庫是mysql 5.7之后的必須要裝2.4.4才可以用,當(dāng)然了, 會(huì)向下兼容的。

工具集:軟件包安裝后,有以下可執(zhí)行文件(版本2.4.6)

bin/

├── innobackupex -> xtrabackup

├── xbcloud

├── xbcloud_osenv

├── xbcrypt

├── xbstream

└── xtrabackup

其中最主要的是 innobackupex 和 xtrabackup,前者是一個(gè) perl 腳本,后者是 C/C++ 編譯的二進(jìn)制。Percona 在2.3 版本用C重寫了 innobackupex ,innobackupex 功能全部集成到 xtrabackup 里面,只有一個(gè) binary,另外為了使用上的兼容考慮,innobackupex 作為 xtrabackup 的一個(gè)軟鏈接。對(duì)于二次開發(fā)來說,2.3 擺脫了之前2個(gè)進(jìn)程協(xié)作的負(fù)擔(dān),架構(gòu)上明顯要好于之前版本。(Percona XtraBackup 2.3 發(fā)布之后,推薦的備份方法是使用 xtrabackup 腳本)

xtrabackup 是用來備份 InnoDB 表的,不能備份非 InnoDB 表,和 mysqld server 沒有交互;innobackupex 腳本用來備份非 InnoDB 表,同時(shí)會(huì)調(diào)用 xtrabackup 命令來備份 InnoDB 表,還會(huì)和 mysqld server 發(fā)送命令進(jìn)行交互,如加讀鎖(FTWRL)、獲取位點(diǎn)(SHOW SLAVE STATUS)等。簡單來說,innobackupex 在 xtrabackup 之上做了一層封裝。

一般情況下,我們是希望能備份 MyISAM 表的,雖然我們可能自己不用 MyISAM 表,但是 mysql 庫下的系統(tǒng)表是 MyISAM 的,因此備份基本都通過 innobackupex 命令進(jìn)行;另外一個(gè)原因是我們可能需要保存位點(diǎn)信息。

另外幾個(gè)工具相對(duì)小眾些,xbcrypt 是加解密備份文件用的;xbstream 類似于tar,是 Percona 自己實(shí)現(xiàn)的一種支持并發(fā)寫的流文件格式;兩者在備份和解壓時(shí)都會(huì)用到(如果備份用了加密和并發(fā))。xbcloud 工具的作用是:把全部或部分 xbstream 檔案從云上下載或上傳到云。

1.2 XtraBackup 原理

2.3版本之前 innobackupex 和 xtrabackup 這2個(gè)工具之間的交互和協(xié)調(diào)是通過控制文件的創(chuàng)建和刪除來實(shí)現(xiàn)的,2.3版本將 innobackupex 功能全部集成到 xtrabackup 里面,也就不需要他們之間的通信。這里介紹基于老的架構(gòu)(2.2版本),但是原理和2.3是一樣的,只是實(shí)現(xiàn)上的差別。

整個(gè)備份過程如下圖:

1.3 PXB 備份過程

1> innobackupex 在啟動(dòng)后,會(huì)先 fork 一個(gè)進(jìn)程,啟動(dòng) xtrabackup進(jìn)程,然后就等待 xtrabackup 備份完 ibd 數(shù)據(jù)文件;

2> xtrabackup 在備份 InnoDB 相關(guān)數(shù)據(jù)時(shí),是有2種線程的,1種是 redo 拷貝線程,負(fù)責(zé)拷貝 redo 文件,1種是 ibd 拷貝線程,負(fù)責(zé)拷貝 ibd 文件;redo 拷貝線程只有一個(gè),在 ibd 拷貝線程之前啟動(dòng),在 ibd 線程結(jié)束后結(jié)束。xtrabackup 進(jìn)程開始執(zhí)行后,先啟動(dòng) redo 拷貝線程,從最新的 checkpoint 點(diǎn)開始順序拷貝 redo 日志;然后再啟動(dòng) ibd 數(shù)據(jù)拷貝線程,在 xtrabackup 拷貝 ibd 過程中,innobackupex 進(jìn)程一直處于等待狀態(tài)(等待文件被創(chuàng)建)。

3> xtrabackup 拷貝完成idb后,通知 innobackupex(通過創(chuàng)建文件),同時(shí)自己進(jìn)入等待(redo 線程仍然繼續(xù)拷貝);

4> innobackupex 收到 xtrabackup 通知后,執(zhí)行FLUSH TABLES WITH READ LOCK (FTWRL),取得一致性位點(diǎn),然后開始備份非 InnoDB 文件(包括 frm、MYD、MYI、CSV、opt、par等)??截惙?InnoDB 文件過程中,因?yàn)閿?shù)據(jù)庫處于全局只讀狀態(tài),如果在業(yè)務(wù)的主庫備份的話,要特別小心,非 InnoDB 表(主要是MyISAM)比較多的話整庫只讀時(shí)間就會(huì)比較長,這個(gè)影響一定要評(píng)估到。

5> 當(dāng) innobackupex 拷貝完所有非 InnoDB 表文件后,通知 xtrabackup(通過刪文件) ,同時(shí)自己進(jìn)入等待(等待另一個(gè)文件被創(chuàng)建);

6> xtrabackup 收到 innobackupex 備份完非 InnoDB 通知后,就停止 redo 拷貝線程,然后通知 innobackupex redo log 拷貝完成(通過創(chuàng)建文件);

7> innobackupex 收到 redo 備份完成通知后,就開始解鎖,執(zhí)行 UNLOCK TABLES;

8> 最后 innobackupex 和 xtrabackup 進(jìn)程各自完成收尾工作,如資源的釋放、寫備份元數(shù)據(jù)信息等,innobackupex 等待 xtrabackup 子進(jìn)程結(jié)束后退出。

在上面描述的文件拷貝,都是備份進(jìn)程直接通過操作系統(tǒng)讀取數(shù)據(jù)文件的,只在執(zhí)行 SQL 命令時(shí)和數(shù)據(jù)庫有交互,基本不影響數(shù)據(jù)庫的運(yùn)行,在備份非 InnoDB 時(shí)會(huì)有一段時(shí)間只讀(如果沒有MyISAM表的話,只讀時(shí)間在幾秒左右),在備份 InnoDB 數(shù)據(jù)文件時(shí),對(duì)數(shù)據(jù)庫完全沒有影響,是真正的熱備。

InnoDB 和非 InnoDB 文件的備份都是通過拷貝文件來做的,但是實(shí)現(xiàn)的方式不同,前者是以page為粒度做的(xtrabackup),后者是 cp 或者 tar 命令(innobackupex),xtrabackup 在讀取每個(gè)page時(shí)會(huì)校驗(yàn) checksum 值,保證數(shù)據(jù)塊是一致的,而 innobackupex 在 cp MyISAM 文件時(shí)已經(jīng)做了flush(FTWRL),磁盤上的文件也是完整的,所以最終備份集里的數(shù)據(jù)文件都是寫入完整的。

1.4 增量備份

PXB 是支持增量備份的,但是只能對(duì) InnoDB 做增量,InnoDB 每個(gè) page 有個(gè) LSN 號(hào),LSN 是全局遞增的,page 被更改時(shí)會(huì)記錄當(dāng)前的 LSN 號(hào),page中的 LSN 越大,說明當(dāng)前page越新(最近被更新)。每次備份會(huì)記錄當(dāng)前備份到的LSN(xtrabackup_checkpoints 文件中),增量備份就是只拷貝LSN大于上次備份的page,比上次備份小的跳過,每個(gè)ibd文件最終備份出來的是增量 delta 文件。

MyISAM 是沒有增量的機(jī)制的,每次增量備份都是全部拷貝的。

增量備份過程和全量備份一樣,只是在 ibd 文件拷貝上有不同。

1.5 恢復(fù)過程

如果看恢復(fù)備份集的日志,會(huì)發(fā)現(xiàn)和 mysqld 啟動(dòng)時(shí)非常相似,其實(shí)備份集的恢復(fù)就是類似 mysqld crash后,做一次 crash recover。

恢復(fù)的目的是把備份集中的數(shù)據(jù)恢復(fù)到一個(gè)一致性位點(diǎn),所謂一致就是指原數(shù)據(jù)庫某一時(shí)間點(diǎn)各引擎數(shù)據(jù)的狀態(tài),比如 MyISAM 中的數(shù)據(jù)對(duì)應(yīng)的是 15:00 時(shí)間點(diǎn)的,InnoDB 中的數(shù)據(jù)對(duì)應(yīng)的是 15:20 的,這種狀態(tài)的數(shù)據(jù)就是不一致的。PXB 備份集對(duì)應(yīng)的一致點(diǎn),就是備份時(shí)FTWRL的時(shí)間點(diǎn),恢復(fù)出來的數(shù)據(jù),就對(duì)應(yīng)原數(shù)據(jù)庫FTWRL時(shí)的狀態(tài)。

因?yàn)閭浞輹r(shí) FTWRL 后,數(shù)據(jù)庫是處于只讀的,非 InnoDB 數(shù)據(jù)是在持有全局讀鎖情況下拷貝的,所以非 InnoDB 數(shù)據(jù)本身就對(duì)應(yīng) FTWRL 時(shí)間點(diǎn);InnoDB 的 ibd 文件拷貝是在 FTWRL 前做的,拷貝出來的不同 ibd 文件最后更新時(shí)間點(diǎn)是不一樣的,這種狀態(tài)的 ibd 文件是不能直接用的,但是 redo log 是從備份開始一直持續(xù)拷貝的,最后的 redo 日志點(diǎn)是在持有 FTWRL 后取得的,所以最終通過 redo 應(yīng)用后的 ibd 數(shù)據(jù)時(shí)間點(diǎn)也是和 FTWRL 一致的。

所以恢復(fù)過程只涉及 InnoDB 文件的恢復(fù),非 InnoDB 數(shù)據(jù)是不動(dòng)的。備份恢復(fù)完成后,就可以把數(shù)據(jù)文件拷貝到對(duì)應(yīng)的目錄,然后通過mysqld來啟動(dòng)了。

注:以上原理摘自阿里云數(shù)據(jù)庫內(nèi)核月報(bào)。

1.6 實(shí)現(xiàn)細(xì)節(jié)

1> 文件權(quán)限

xtrabackup以read-write模式打開innodb的數(shù)據(jù)文件,然后對(duì)其進(jìn)行復(fù)制。其實(shí)它不會(huì)修改此文件。也就是說,運(yùn)行xtrabackup的用戶,必須對(duì)innodb的數(shù)據(jù)文件具有讀寫權(quán)限。為什么要用rw模式呢?直接read模式不好么?因?yàn)閤trabackup采用了其內(nèi)置的innodb庫來打開文件,而innodb庫打開文件的時(shí)候就是rw的。

2> 調(diào)整操作系統(tǒng)緩沖區(qū)

因?yàn)閄traBackup要從文件系統(tǒng)中復(fù)制大量的數(shù)據(jù),所以它盡可能地使用 posix_fadvise(),來告訴OS不要緩存讀取到的數(shù)據(jù),因?yàn)檫@些數(shù)據(jù)不會(huì)重用到了,從而提升性能。如果一次備份要緩存幾個(gè)G的數(shù)據(jù),會(huì)對(duì)OS的虛擬內(nèi)存造成很大的壓力,其它進(jìn)程,比如mysqld很有可能被swap出去,這樣系統(tǒng)就會(huì)受到很大影響了。xtrabackup 就是通過 posix_fadvise() 來避免這種情況:

posix_fadvise(file,0,0,POSIX_FADV_DONTNEED)

而且, xtrabackup 要求操作系統(tǒng)對(duì)源文件進(jìn)行更多的預(yù)讀優(yōu)化:

posix_fadvise(file,0,0,POSIX_FADV_SEQUENTIAL)

3> 復(fù)制數(shù)據(jù)文件

在備份innodb page的過程中,XtraBackup 每次讀寫1MB的數(shù)據(jù),1MB/16KB=64個(gè)page。這個(gè)不可配置。讀取1MB數(shù)據(jù)之后,XtraBackup一頁一頁地遍歷這1MB數(shù)據(jù),并使用innodb的buf_page_is_corrupted()函數(shù)檢查此頁的數(shù)據(jù)是否正常,如果數(shù)據(jù)不正常,就重新讀取這一頁,最多重新讀取10次(注意:doublewrite buffer 中的 page 會(huì)跳過此檢查)。

在復(fù)制 transactions log(redo log) 的時(shí)候,每次讀寫512KB的數(shù)據(jù)。同樣不可以配置。

2. xtrabackup安裝

l  rpm 安裝(下載:https://pan.baidu.com/s/1sl4jByP)

l  二進(jìn)制安裝/解壓縮安裝(下載:https://pan.baidu.com/s/1c1Vyt3q)

l  編譯安裝

1> rpm 安裝

這種安裝方法比較簡單,只需下載相應(yīng)的rpm安裝包安裝即可(注意根據(jù)提示安裝相應(yīng)的依賴包)。其中需要的 libev.so.4() 安裝包:https://pan.baidu.com/s/1i4EZfwT

[root@orcl ~]# cat /etc/issue

Red Hat Enterprise Linux Server release 6.5 (Santiago)

[root@orcl ~]# uname -r

2.6.32-431.el6.x86_64

[root@orcl ~]# rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm

warning: libev-4.15-1.el6.rf.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 6b8d79e6: NOKEY

Preparing...                ########################################### [100%]

   1:libev                  ########################################### [100%]

#### linux 6.5還需要安裝以下依賴

# yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL

[root@orcl ~]# rpm -ivh percona-xtrabackup-24-2.4.6-2.el6.x86_64.rpm

warning: percona-xtrabackup-24-2.4.6-2.el6.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY

Preparing...                ########################################### [100%]

   1:percona-xtrabackup-24  ########################################### [100%]

[root@orcl ~]# xtrabackup --version

xtrabackup version 2.4.6 based on MySQL server 5.7.13 Linux (x86_64) (revision id: 8ec05b7)

2> 二進(jìn)制安裝/解壓縮安裝

這種安裝方法也很簡單,不需要安裝依賴,只需解壓安裝文件,為了方便可創(chuàng)建軟連接

# tar zxvf percona-xtrabackup-2.4.6-Linux-x86_64.tar.gz   #解壓目錄下有3個(gè)目錄: bin  man  percona-xtrabackup-2.4-test

# mv percona-xtrabackup-2.4.6-Linux-x86_64 /usr/local/xtrabackup

# ln -sf /usr/local/xtrabackup/bin/* /usr/bin/          #給命令建個(gè)軟連接

[root@centos6 ~]# xtrabackup --version

xtrabackup version 2.4.6 based on MySQL server 5.7.13 Linux (x86_64) (revision id: 8ec05b7)

3> 編譯安裝

這種安裝方法比較麻煩,需要安裝很多依賴,也很耗時(shí)間,這里就不做介紹了

3. xtrabackup選項(xiàng)

xtrabackup 工具有許多參數(shù),具體可去官網(wǎng)查詢(xtrabackup 參數(shù)選項(xiàng) | innobackupex 參數(shù)選項(xiàng)),這里簡單介紹 innobackupex 一些常用的參數(shù)。

3.1 innobackupex 參數(shù)選項(xiàng)

--defaults-file=[MY.CNF]    //指定配置文件:只能從給定的文件中讀取默認(rèn)選項(xiàng)。 且必須作為命令行上的第一個(gè)選項(xiàng);必須是一個(gè)真實(shí)的文件,它不能是一個(gè)符號(hào)鏈接。

--databases=#    //指定備份的數(shù)據(jù)庫和表,格式為:--database="db1[.tb1] db2[.tb2]" 多個(gè)庫之間以空格隔開,如果此選項(xiàng)不被指定,將會(huì)備份所有的數(shù)據(jù)庫。

--include=REGEXP    //用正則表達(dá)式的方式指定要備份的數(shù)據(jù)庫和表,格式為 --include=‘^mydb[.]mytb’ ,對(duì)每個(gè)庫中的每個(gè)表逐一匹配,因此會(huì)創(chuàng)建所有的庫,不過是空的目錄。--include 傳遞給 xtrabackup --tables。

--tables-file=FILE    //此選項(xiàng)的參數(shù)需要是一個(gè)文件名,此文件中每行包含一個(gè)要備份的表的完整名稱,格式為databasename.tablename。該選項(xiàng)傳遞給 xtrabackup --tables-file,與--tables選項(xiàng)不同,只有要備份的表的庫才會(huì)被創(chuàng)建。

注意:部分備份(--include、--tables-file、--database)需要開啟 innodb_file_per_table 。

--compact    //創(chuàng)建緊湊型備份,忽略所有輔助索引頁,只備份data page;通過--apply-log中重建索引--rebuild-indexs。

--compress    //此選項(xiàng)指示xtrabackup壓縮備份的InnoDB數(shù)據(jù)文件,會(huì)生成 *.qp 文件。

--decompress    //解壓縮qp文件,為了解壓縮,必須安裝 qpress 工具。 Percona XtraBackup不會(huì)自動(dòng)刪除壓縮文件,為了清理備份目錄,用戶應(yīng)手動(dòng)刪除 * .qp文件:find /data/backup -name "*.qp" | xargs rm。

--no-timestamp    //指定了這個(gè)選項(xiàng)備份將會(huì)直接存儲(chǔ)在 BACKUP-DIR 目錄,不再創(chuàng)建時(shí)間戳文件夾。

--apply-log    //應(yīng)用 BACKUP-DIR 中的 xtrabackup_logfile 事務(wù)日志文件。一般情況下,在備份完成后,數(shù)據(jù)尚且不能用于恢復(fù)操作,因?yàn)閭浞莸臄?shù)據(jù)中可能會(huì)包含尚未提交的事務(wù)或已經(jīng)提交但尚未同步至數(shù)據(jù)文件中的事務(wù)。因此,此時(shí)數(shù)據(jù)文件仍處于不一致狀態(tài)?!皽?zhǔn)備”的主要作用正是通過回滾未提交的事務(wù)及同步已經(jīng)提交的事務(wù)至數(shù)據(jù)文件使得數(shù)據(jù)文件處于一致性狀態(tài)。

--use-memory=#    //此選項(xiàng)接受一個(gè)字符參數(shù)(1M/1MB,1G/1GB,默認(rèn)100M),僅與--apply-log一起使用,該選項(xiàng)指定prepare時(shí)用于崩潰恢復(fù)(crash-recovery)的內(nèi)存。

--copy-back    //拷貝先前備份所有文件到它們的原始路徑。但原路徑下不能有任何文件或目錄,除非指定 --force-non-empty-directories 選項(xiàng)。

--force-non-empty-directories    //恢復(fù)時(shí)指定此選項(xiàng),可使 --copy-back 和 --move-back 復(fù)制文件到非空目錄,即原data目錄下可以有其他文件,但是不能有與恢復(fù)文件中同名的文件,否則恢復(fù)失敗。

--rsync    //此選項(xiàng)可優(yōu)化本地文件(非InnoDB)的傳輸。rsync工具一次性拷貝所有非InnoDB文件,而不是為每個(gè)文件單獨(dú)創(chuàng)建cp,在備份恢復(fù)很多數(shù)據(jù)庫和表時(shí)非常高效。此選項(xiàng)不能和 --stream 一起使用。

--incremental    //這個(gè)選項(xiàng)告訴 xtrabackup 創(chuàng)建一個(gè)增量備份,而不是完全備份。它傳遞到 xtrabackup 子進(jìn)程。當(dāng)指定這個(gè)選項(xiàng),可以設(shè)置 --incremental-lsn 或 --incremental-basedir。如果這2個(gè)選項(xiàng)都沒有被指定,--incremental-basedir 傳遞給 xtrabackup 默認(rèn)值,默認(rèn)值為:基礎(chǔ)備份目錄的第一個(gè)時(shí)間戳備份目錄。

--incremental-basedir=DIRECTORY    //該選項(xiàng)接受一個(gè)字符串參數(shù),該參數(shù)指定作為增量備份的基本數(shù)據(jù)集的完整備份目錄。它與 --incremental 一起使用。

--incremental-dir=DIRECTORY    //該選項(xiàng)接受一個(gè)字符串參數(shù),該參數(shù)指定了增量備份將與完整備份相結(jié)合的目錄,以便進(jìn)行新的完整備份。它與 --incremental 選項(xiàng)一起使用。

--redo-only    //在“準(zhǔn)備基本完整備份” 和 “合并所有的增量備份(除了最后一個(gè)增備)”時(shí)使用此選項(xiàng)。它直接傳遞給xtrabackup的 xtrabackup --apply-log-only 選項(xiàng),使xtrabackup跳過"undo"階段,只做"redo"操作。如果后面還有增量備份應(yīng)用到這個(gè)全備,這是必要的。有關(guān)詳細(xì)信息,請(qǐng)參閱xtrabackup文檔。

--parallel=NUMBER-OF-THREADS    //此選項(xiàng)接受一個(gè)整數(shù)參數(shù),指定xtrabackup子進(jìn)程應(yīng)用于同時(shí)備份文件的線程數(shù)。請(qǐng)注意,此選項(xiàng)僅適用于文件級(jí)別,也就是說,如果您有多個(gè).ibd文件,則它們將被并行復(fù)制; 如果您的表一起存儲(chǔ)在一個(gè)表空間文件中,它將不起作用。

3.2 xtrabackup 參數(shù)選項(xiàng)

--apply-log-only    //這個(gè)選項(xiàng)使在準(zhǔn)備備份(prepare)時(shí),只執(zhí)行重做(redo)階段,這對(duì)于增量備份非常重要。

4. xtrabackup 全量備份恢復(fù)

4.1 完全備份

4.1.1 備份準(zhǔn)備

## 創(chuàng)建用于備份恢復(fù)的用戶 pxb 并賦予權(quán)限

mysql> create user pxb@'localhost' identified by '123456';

mysql> grant reload,process,lock tables,replication client on *.* to pxb@localhost;

#### 這些權(quán)限僅僅只能完成:全備,增量備份,恢復(fù);

一般如果需要部分備份,export表,import表,還需要:grant create tablespace on *.* to 'bkpuser'@'localhost';

如果還需要對(duì)備份的過程中對(duì)鎖進(jìn)行一些優(yōu)化,防止發(fā)生阻塞所有DML的情況,則還需要:

grant process,super on *.* to 'bkpuser'@'localhost';

## 創(chuàng)建存放備份目錄

[root@orcl ~]# mkdir -pv /data/pxb

mkdir: created directory `/data'

mkdir: created directory `/data/pxb'

4.1.2 全庫備份

[root@orcl ~]# innobackupex ----defaults-file=/etc/my.cnf --user=pxb --password=123456 --socket=/app/mysql/tmp/mysql.sock /data/pxb/

180321 11:29:47 innobackupex: Starting the backup operation

IMPORTANT: Please check that the backup run completes successfully.

           At the end of a successful backup run innobackupex

           prints "completed OK!".

180321 11:29:47  version_check Connecting to MySQL server with DSN 'dbi:mysql:;mysql_read_default_group=xtrabackup;port=3306;mysql_socket=/app/mysql/tmp/mysql.sock' as 'pxb'  (using password: YES).

180321 11:29:47  version_check Connected to MySQL server

180321 11:29:47  version_check Executing a version check against the server...

180321 11:29:47  version_check Done.

180321 11:29:47 Connecting to MySQL server host: localhost, user: pxb, password: set, port: 3306, socket: /app/mysql/tmp/mysql.sock

Using server version 5.5.32-log

innobackupex version 2.4.6 based on MySQL server 5.7.13 Linux (x86_64) (revision id: 8ec05b7)

xtrabackup: uses posix_fadvise().

xtrabackup: cd to /app/mysql-5.5.32/data/

xtrabackup: open files limit requested 0, set to 1024

xtrabackup: using the following InnoDB configuration:

xtrabackup:   innodb_data_home_dir = .

xtrabackup:   innodb_data_file_path = ibdata1:10M:autoextend

xtrabackup:   innodb_log_group_home_dir = ./

xtrabackup:   innodb_log_files_in_group = 2

xtrabackup:   innodb_log_file_size = 5242880

InnoDB: Number of pools: 1

180321 11:29:47 >> log scanned up to (1610330)

xtrabackup: Generating a list of tablespaces

180321 11:29:48 [01] Copying ./ibdata1 to /data/pxb/2018-03-21_11-29-47/ibdata1

180321 11:29:48 [01]        ...done

180321 11:29:48 >> log scanned up to (1610330)

180321 11:29:49 Executing FLUSH NO_WRITE_TO_BINLOG TABLES...

180321 11:29:49 Executing FLUSH TABLES WITH READ LOCK...

180321 11:29:49 Starting to backup non-InnoDB tables and files

。。。。。。。。。

180321 11:29:50 Executing UNLOCK TABLES

180321 11:29:50 All tables unlocked

180321 11:29:50 Backup created in directory '/data/pxb/2018-03-21_11-29-47/'

MySQL binlog position: filename 'mysql-bin.000001', position '366'

180321 11:29:50 [00] Writing backup-my.cnf

180321 11:29:50 [00]        ...done

180321 11:29:50 [00] Writing xtrabackup_info

180321 11:29:50 [00]        ...done

xtrabackup: Transaction log of lsn (1610330) to (1610330) was copied.

180321 11:29:50 completed OK!

4.1.3 查看生成的文件

可以看到整個(gè)備份過程:連接數(shù)據(jù)庫,開始拷貝redo log,拷貝innodb表文件,鎖表、拷貝非innodb表文件,停止拷貝redo log,解鎖。

[root@orcl ~]# ls -lrht /data/pxb/2018-03-21_11-29-47/

total 19M

-rw-r----- 1 root root  18M Mar 21 11:29 ibdata1

drwxr-x--- 2 root root 4.0K Mar 21 11:29 mysql

drwxr-x--- 2 root root 4.0K Mar 21 11:29 shaw_db

drwxr-x--- 2 root root 4.0K Mar 21 11:29 performance_schema

-rw-r----- 1 root root   21 Mar 21 11:29 xtrabackup_binlog_info

-rw-r----- 1 root root 2.5K Mar 21 11:29 xtrabackup_logfile

-rw-r----- 1 root root  113 Mar 21 11:29 xtrabackup_checkpoints

-rw-r----- 1 root root  417 Mar 21 11:29 backup-my.cnf

-rw-r----- 1 root root  530 Mar 21 11:29 xtrabackup_info

其中,mysql/, performance_schema/, shaw_db/ 下存放的是數(shù)據(jù)庫文件。

backup-my.cnf,備份命令用到的配置選項(xiàng)信息;

[root@orcl 2018-03-21_11-29-47]# cat backup-my.cnf

# This MySQL options file was generated by innobackupex.

# The MySQL server

[mysqld]

innodb_checksum_algorithm=innodb

innodb_log_checksum_algorithm=innodb

innodb_data_file_path=ibdata1:10M:autoextend

innodb_log_files_in_group=2

innodb_log_file_size=5242880

innodb_fast_checksum=false

innodb_page_size=16384

innodb_log_block_size=512

innodb_undo_directory=.

innodb_undo_tablespaces=0

server_id=3

redo_log_version=0

ib_buffer_pool, buffer pool 中的熱數(shù)據(jù),當(dāng)設(shè)置 innodb_buffer_pool_dump_at_shutdown=1 ,在關(guān)閉 MySQL 時(shí),會(huì)把內(nèi)存中的熱數(shù)據(jù)保存在磁盤里 ib_buffer_pool 文件中,位于數(shù)據(jù)目錄下。

ibdata1,備份的共享表空間文件;

[root@orcl 2018-03-21_11-29-47]# file ibdata1

ibdata1: data

xtrabackup_binlog_info,mysql服務(wù)器當(dāng)前正在使用的二進(jìn)制日志文件及至備份這一刻為止二進(jìn)制日志事件的位置;

[root@orcl 2018-03-21_11-29-47]# cat xtrabackup_binlog_info

mysql-bin.000001        366

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

[root@orcl 2018-03-21_11-29-47]# cat xtrabackup_checkpoints

backup_type = full-backuped

from_lsn = 0

to_lsn = 1610330

last_lsn = 1610330

compact = 0

recover_binlog_info = 0

xtrabackup_info,記錄備份的基本信息,uuid、備份命令、備份時(shí)間、binlog、LSN、以及其他加密壓縮等信息。

[root@orcl 2018-03-21_11-29-47]# cat xtrabackup_info

uuid = 1cbf36cc-2cb8-11e8-8495-000c29ee24c9

name =

tool_name = innobackupex

tool_command = ----defaults-file=/etc/my.cnf --user=pxb --password=... --socket=/app/mysql/tmp/mysql.sock /data/pxb/

tool_version = 2.4.6

ibbackup_version = 2.4.6

server_version = 5.5.32-log

start_time = 2018-03-21 11:29:47

end_time = 2018-03-21 11:29:50

lock_time = 0

binlog_pos = filename 'mysql-bin.000001', position '366'

innodb_from_lsn = 0

innodb_to_lsn = 1610330

partial = N

incremental = N

format = file

compact = N

compressed = N

encrypted = N

xtrabackup_logfile,備份的重做日志文件。

[root@orcl 2018-03-21_11-29-47]# file xtrabackup_logfile

xtrabackup_logfile: data

4.2 全備恢復(fù)

## 關(guān)閉數(shù)據(jù)庫并刪除數(shù)據(jù)文件

mysql> create table shaw_db.t_zhongbak as select * from mysql.user; --沒做備份的數(shù)據(jù)會(huì)丟失

[root@orcl ~]# /etc/init.d/mysqld stop

Shutting down MySQL....                                    [  OK  ]

[root@orcl ~]# cd /app/mysql/

[root@orcl mysql]# mv data/ data_bak/

[root@orcl mysql]# mkdir data

4.2.1 應(yīng)用日志

準(zhǔn)備(prepare)一個(gè)完全備份(兩次prepare,第一次應(yīng)用備份期間產(chǎn)生的redo log,進(jìn)行前滾和回滾:replay在redo log中已經(jīng)提交的事務(wù),rollback沒有提交的事務(wù)): --apply-log ( /data/pxb/2018-03-21_11-29-47/ 為備份目錄,執(zhí)行之后 xtrabackup_checkpoints 文件中的 backup_type = full-prepared )

[root@orcl ~]# innobackupex --apply-log /data/pxb/2018-03-21_11-29-47/

180321 11:51:10 innobackupex: Starting the apply-log operation

IMPORTANT: Please check that the apply-log run completes successfully.

           At the end of a successful apply-log run innobackupex

           prints "completed OK!".

。。。。。。

xtrabackup: starting shutdown with innodb_fast_shutdown = 1

InnoDB: FTS optimize thread exiting.

InnoDB: Starting shutdown...

InnoDB: Shutdown completed; log sequence number 1610792

180321 11:51:14 completed OK!

## --apply-log會(huì)調(diào)用 xtrabackup --prepare兩次,第一次前滾和回滾,第二次生成iblogfile[0|1]

4.2.2 恢復(fù)全備

直接將上面prepare好的所有文件,復(fù)制到mysqld的datadir目錄(會(huì)讀取my.cnf中的配置信息)。

--copy--back的注意事項(xiàng):

1> datadir的目錄必須是空的,或者使用--force-non-empty-directories選項(xiàng);

2> mysqld必須關(guān)閉,如果是--import部分恢復(fù),則不能關(guān)閉;

3> --copy-back完成之后,需要修改datadir目錄下的文件權(quán)限: chown -R mysql:mysql /var/lib/mysql

## 執(zhí)行恢復(fù)操作

[root@orcl ~]# innobackupex  --defaults-file=/etc/my.cnf --copy-back --rsync /data/pxb/2018-03-21_11-29-47/

180321 12:20:29 innobackupex: Starting the copy-back operation

IMPORTANT: Please check that the copy-back run completes successfully.

           At the end of a successful copy-back run innobackupex

           prints "completed OK!".

innobackupex version 2.4.6 based on MySQL server 5.7.13 Linux (x86_64) (revision id: 8ec05b7)

Error: datadir must be specified.

## 添加datadir目錄

[root@orcl ~]# vi /etc/my.cnf

datadir =/app/mysql/data

[root@orcl ~]# innobackupex  --defaults-file=/etc/my.cnf --copy-back --rsync /data/pxb/2018-03-21_11-29-47/

180321 12:25:39 innobackupex: Starting the copy-back operation

IMPORTANT: Please check that the copy-back run completes successfully.

           At the end of a successful copy-back run innobackupex

           prints "completed OK!".

innobackupex version 2.4.6 based on MySQL server 5.7.13 Linux (x86_64) (revision id: 8ec05b7)

180321 12:25:39 [01] Copying ib_logfile0 to /app/mysql/data/ib_logfile0

180321 12:25:39 [01]        ...done

。。。。。。

Copying ./performance_schema/events_waits_summary_by_thread_by_event_name.frm to /app/mysql/data/performance_schema/events_waits_summary_by_thread_by_event_name.frm

180321 12:25:41 [01]        ...done

180321 12:25:41 [01] Copying ./xtrabackup_info to /app/mysql/data/xtrabackup_info

180321 12:25:41 [01]        ...done

180321 12:25:41 completed OK!

## 更改 data/ 目錄權(quán)限并啟動(dòng)mysql

[root@orcl ~]# chown -R mysql. /app/mysql/data

## 啟動(dòng)mysql服務(wù)

[root@orcl ~]# /etc/init.d/mysqld start

Starting MySQL..                                           [  OK  ]

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

| shaw_db            |

+--------------------+

mysql> use shaw_db

Database changed

mysql> show tables;

+-------------------+

| Tables_in_shaw_db |

+-------------------+

| t_user            |

| t_zhong           |

+-------------------+

2 rows in set (0.00 sec)

5. xtrabackup 全量備份恢復(fù)

增量備份之前,必須建立一個(gè)全備,第一次增量備份是在全備的基礎(chǔ)之上,第二次增量備份是在第一次增量備份的基礎(chǔ)之上的,依次類推

5.1 增量備份1

## 新建一張表,并插入寫數(shù)據(jù),然后做增量備份

mysql> create table shaw_db.t_shaw as select * from mysql.user;

mysql> create table shaw_db.t_zhongbak as select * from shaw_db.t_zhong;

## 以全備為基準(zhǔn):(/data/pxb/2018-03-21_12-32-32/)

[root@orcl ~]# innobackupex --defaults-file=/etc/my.cnf --user=pxb --password=123456 --socket=/app/mysql/tmp/mysql.sock --incremental /data/pxb/inc --incremental-basedir=/data/pxb/2018-03-21_12-32-32/ --parallel=2

180321 12:47:17 innobackupex: Starting the backup operation

IMPORTANT: Please check that the backup run completes successfully.

           At the end of a successful backup run innobackupex

           prints "completed OK!".

180321 12:47:17  version_check Connecting to MySQL server with DSN 'dbi:mysql:;mysql_read_default_group=xtrabackup;port=3306;mysql_socket=/app/mysql/tmp/mysql.sock' as 'pxb'  (using password: YES).

。。。。。。

180321 12:47:20 Executing UNLOCK TABLES

180321 12:47:20 All tables unlocked

180321 12:47:20 Backup created in directory '/data/pxb/inc/2018-03-21_12-47-17/'

MySQL binlog position: filename 'mysql-bin.000001', position '350'

180321 12:47:20 [00] Writing backup-my.cnf

180321 12:47:20 [00]        ...done

180321 12:47:20 [00] Writing xtrabackup_info

180321 12:47:20 [00]        ...done

xtrabackup: Transaction log of lsn (1631682) to (1631682) was copied.

180321 12:47:20 completed OK!

[root@orcl ~]# cat /data/pxb/inc/2018-03-21_12-47-17/xtrabackup_checkpoints

backup_type = incremental  ## 說明是增量備份

from_lsn = 1615487

to_lsn = 1631682

last_lsn = 1631682

compact = 0

recover_binlog_info = 0

5.2 增量備份2

## 再新建一些表,并插入寫數(shù)據(jù),然后做增量備份

mysql> create table shaw_db.t_shaw2 as select * from mysql.user;

mysql> create table shaw_db.t_zhongbak2 as select * from shaw_db.t_zhong;

## 以增量1為基準(zhǔn):(/data/pxb/inc/2018-03-21_12-47-17/)

[root@orcl ~]# innobackupex --defaults-file=/etc/my.cnf --user=pxb --password=123456 --socket=/app/mysql/tmp/mysql.sock --incremental /data/pxb/inc/ --incremental-basedir=/data/pxb/inc/2018-03-21_12-47-17/ --parallel=4

180321 12:54:18 innobackupex: Starting the backup operation

IMPORTANT: Please check that the backup run completes successfully.

           At the end of a successful backup run innobackupex

           prints "completed OK!".

180321 12:54:18  version_check Connecting to MySQL server with DSN 'dbi:mysql:;mysql_read_default_group=xtrabackup;port=3306;mysql_socket=/app/mysql/tmp/mysql.sock' as 'pxb'  (using password: YES).

180321 12:54:18  version_check Connected to MySQL server

180321 12:54:18  version_check Executing a version check against the server...

180321 12:54:18  version_check Done.

180321 12:54:18 Connecting to MySQL server host: localhost, user: pxb, password: set, port: 3306, socket: /app/mysql/tmp/mysql.sock

。。。。。。

180321 12:54:22 Executing UNLOCK TABLES

180321 12:54:22 All tables unlocked

180321 12:54:22 Backup created in directory '/data/pxb/inc/2018-03-21_12-54-18/'

MySQL binlog position: filename 'mysql-bin.000001', position '589'

180321 12:54:22 [00] Writing backup-my.cnf

180321 12:54:22 [00]        ...done

180321 12:54:22 [00] Writing xtrabackup_info

180321 12:54:22 [00]        ...done

xtrabackup: Transaction log of lsn (1648889) to (1648889) was copied.

180321 12:54:22 completed OK!

[root@orcl ~]# cat /data/pxb/inc/2018-03-21_12-54-18/xtrabackup_checkpoints

backup_type = incremental

from_lsn = 1631682

to_lsn = 1648889

last_lsn = 1648889

compact = 0

recover_binlog_info = 0

5.3 增量備份的恢復(fù)

增量備份的恢復(fù)需要有3個(gè)步驟

1> 恢復(fù)完全備份

2> 恢復(fù)增量備份到完全備份(開始恢復(fù)的增量備份要添加--redo-only參數(shù),到最后一次增量備份要去掉--redo-only)

3> 對(duì)整體的完全備份進(jìn)行恢復(fù),回滾未提交的數(shù)據(jù)

5.3.1 準(zhǔn)備一個(gè)全備

[root@orcl ~]# innobackupex --apply-log --redo-only /data/pxb/2018-03-21_12-32-32/

180321 14:21:11 innobackupex: Starting the apply-log operation

IMPORTANT: Please check that the apply-log run completes successfully.

           At the end of a successful apply-log run innobackupex

           prints "completed OK!".

。。。。。。

xtrabackup: starting shutdown with innodb_fast_shutdown = 1

InnoDB: Starting shutdown...

InnoDB: Shutdown completed; log sequence number 1615930

InnoDB: Number of pools: 1

180321 14:21:13 completed OK!

5.3.2 將增量1應(yīng)用到完全備份

[root@orcl ~]# innobackupex --apply-log --redo-only /data/pxb/2018-03-21_12-32-32/ --incremental-dir=/data/pxb/inc/2018-03-21_12-47-17/

180321 14:22:41 innobackupex: Starting the apply-log operation

IMPORTANT: Please check that the apply-log run completes successfully.

           At the end of a successful apply-log run innobackupex

           prints "completed OK!".

。。。。。。

180321 14:22:44 [00]        ...done

180321 14:22:44 [00] Copying /data/pxb/inc/2018-03-21_12-47-17//xtrabackup_info to ./xtrabackup_info

180321 14:22:44 [00]        ...done

180321 14:22:44 completed OK!

5.3.3 將增量2應(yīng)用到完全備份,注意不加—redo-only參數(shù)了

[root@orcl ~]# innobackupex --apply-log /data/pxb/2018-03-21_12-32-32/ --incremental-dir=/data/pxb/inc/2018-03-21_12-54-18/

180321 14:24:29 innobackupex: Starting the apply-log operation

IMPORTANT: Please check that the apply-log run completes successfully.

           At the end of a successful apply-log run innobackupex

           prints "completed OK!".

5.3.4 把所有合在一起的完全備份整體進(jìn)行一次apply操作,回滾未提交的數(shù)據(jù)

[root@orcl ~]# innobackupex --apply-log /data/pxb/2018-03-21_12-32-32/

180321 14:26:11 innobackupex: Starting the apply-log operation

IMPORTANT: Please check that the apply-log run completes successfully.

           At the end of a successful apply-log run innobackupex

           prints "completed OK!".

。。。。。。

InnoDB: 5.7.13 started; log sequence number 1615930

InnoDB: xtrabackup: Last MySQL binlog file position 589, file name ./mysql-bin.000001

xtrabackup: error: The transaction log file is corrupted.

xtrabackup: error: The log was not applied to the intended LSN!

xtrabackup: Log applied to lsn 1615930

xtrabackup: The intended lsn is 1648889

5.3.5 恢復(fù)數(shù)據(jù)庫

## 先刪除data目錄

[root@orcl ~]# rm -rf /app/mysql/data

[root@orcl ~]# mkdir /app/mysql/data

## 恢復(fù)數(shù)據(jù)庫

[root@orcl ~]# innobackupex --defaults-file=/etc/my.cnf --copy-back --rsync /data/pxb/2018-03-21_12-32-32/

180321 14:31:56 innobackupex: Starting the copy-back operation

IMPORTANT: Please check that the copy-back run completes successfully.

           At the end of a successful copy-back run innobackupex

           prints "completed OK!".

。。。。。。

180321 14:31:58 [01] Copying ./xtrabackup_binlog_pos_innodb to /app/mysql/data/xtrabackup_binlog_pos_innodb

180321 14:31:58 [01]        ...done

180321 14:31:58 completed OK!

[root@orcl ~]# chown -R mysql:mysql /app/mysql/data

[root@orcl ~]# /etc/init.d/mysqld start

Starting MySQL...The server quit without updating PID file [FAILED]sql/data/orcl.pid).

[root@orcl ~]# ps -ef |grep mysql

[root@orcl ~]# killall mysqld

[root@orcl ~]# /etc/init.d/mysqld start

Starting MySQL..                                           [  OK  ]

mysql> use shaw_db;

Database changed

mysql> show tables;

+-------------------+

| Tables_in_shaw_db |

+-------------------+

| t_shaw            |

| t_shaw2           |

| t_zhong           |

| t_zhongbak        |

| t_zhongbak2       |

+-------------------+

6. innobackupex選項(xiàng)優(yōu)化、最佳實(shí)踐

在備份非innodb數(shù)據(jù)庫時(shí),會(huì)使用:flush tables with read lock 全局鎖鎖住整個(gè)數(shù)據(jù)庫。如果數(shù)據(jù)庫中有一個(gè)長查詢?cè)谶\(yùn)行,那么FTWRL就不能獲得,會(huì)被阻塞,進(jìn)而阻塞所有的DML操作。此時(shí)即使我們kill掉FTWRL全局鎖也是無法從阻塞中恢復(fù)出來的。另外在我們成功的獲得了FTWRL全局鎖之后,在copy非事務(wù)因?yàn)榈奈募倪^程中,整個(gè)數(shù)據(jù)庫也是被鎖住的。所以我們應(yīng)該讓FTWRL的過程盡量的短。(在copy非事務(wù)引擎數(shù)據(jù)的文件時(shí),會(huì)阻塞innodb事務(wù)引擎。當(dāng)然也會(huì)阻塞所有其他非事務(wù)引擎。)

--ftwrl-wait-timeout=60 防止發(fā)生阻塞

--rsync 減少FTWRL時(shí)間 縮短備份非事務(wù)引擎表的鎖定時(shí)間

--parallel=4  開并行

--use-memory=4G crash recovery 期間使用的內(nèi)存

--lock-wait-timeout=60 該選項(xiàng)表示:我們?cè)贔TWRL時(shí),如果有長查詢,那么我們可以最多等待60S的時(shí)間,如果60秒之內(nèi)長查詢執(zhí)行完了,我們就可以成功執(zhí)行FTWRL了,如果60秒之內(nèi)沒有執(zhí)行完,那么就直接報(bào)錯(cuò)退出,放棄。默認(rèn)值為0

--rsync 使用該選項(xiàng)來縮短備份非事務(wù)引擎表的鎖定時(shí)間,如果需要備份的數(shù)據(jù)庫和表數(shù)量很多時(shí),可以加快速度。

--parallel=# 在備份階段,壓縮/解壓階段,加密/解密階段,--apply-log,--copy-back 階段都可以并行  

--use-memory=# 在crash recovery 階段,也就是 --apply-log 階段使用該選項(xiàng)

7. 自動(dòng)備份腳本

# mkdir –p /data/pxb/baklog

7.1 腳本內(nèi)容

#backup.sh

#!/bin/sh

#on xtrabackup 2.2.8

# 第一次執(zhí)行它的時(shí)候它會(huì)檢查是否有完全備份,否則先創(chuàng)建一個(gè)全庫備份

# 當(dāng)你再次運(yùn)行它的時(shí)候,它會(huì)根據(jù)腳本中的設(shè)定來基于之前的全備或增量備份進(jìn)行增量備份

#ocpyang@126.com

INNOBACKUPEX_PATH=innobackupex  #INNOBACKUPEX的命令

INNOBACKUPEXFULL=/usr/bin/$INNOBACKUPEX_PATH  #INNOBACKUPEX的命令路徑

#mysql目標(biāo)服務(wù)器以及用戶名和密碼

MYSQL_CMD="--host=192.168.12.55 --user=root --password=111111 --port=3306" 

MYSQL_UP=" --user=root --password='111111' --port=3306 "  #mysqladmin的用戶名和密碼

TMPLOG="/data/pxb/innobackupex.$$.log"

MY_CNF=/etc/my.cnf #mysql的配置文件

MYSQL=/app/mysql/bin/mysql

MYSQL_ADMIN=/app/mysql/bin/mysqladmin

BACKUP_DIR=/data/pxb # 備份的主目錄

FULLBACKUP_DIR=$BACKUP_DIR/full # 全庫備份的目錄

INCRBACKUP_DIR=$BACKUP_DIR/incre # 增量備份的目錄

FULLBACKUP_INTERVAL=86400 # 全庫備份的間隔周期,時(shí)間:秒

KEEP_FULLBACKUP=1 # 至少保留幾個(gè)全庫備份

logfiledate=backup.`date +%Y%m%d%H%M`.txt

#開始時(shí)間

STARTED_TIME=`date +%s`

#############################################################################

# 顯示錯(cuò)誤并退出

#############################################################################

error()

{

    echo "$1" 1>&2

    exit 1

}

# 檢查執(zhí)行環(huán)境

if [ ! -x $INNOBACKUPEXFULL ]; then

  error "$INNOBACKUPEXFULL未安裝或未鏈接到/usr/bin."

fi

if [ ! -d $BACKUP_DIR ]; then

  error "備份目標(biāo)文件夾:$BACKUP_DIR不存在."

fi

mysql_status=`netstat -nl | awk 'NR>2{if ($4 ~ /.*:3306/) {print "Yes";exit 0}}'`

if [ "$mysql_status" != "Yes" ];then

    error "MySQL 沒有啟動(dòng)運(yùn)行."

fi

if ! `echo 'exit' | $MYSQL -s $MYSQL_CMD` ; then

 error "提供的數(shù)據(jù)庫用戶名或密碼不正確!"

fi

# 備份的頭部信息

echo "----------------------------"

echo

echo "$0: MySQL備份腳本"

echo "開始于: `date +%F' '%T' '%w`"

echo

#新建全備和差異備份的目錄

mkdir -p $FULLBACKUP_DIR

mkdir -p $INCRBACKUP_DIR

#查找最新的完全備份

LATEST_FULL_BACKUP=`find $FULLBACKUP_DIR -mindepth 1 -maxdepth 1 -type d -printf "%P\n" | sort -nr | head -1`

# 查找最近修改的最新備份時(shí)間

LATEST_FULL_BACKUP_CREATED_TIME=`stat -c %Y $FULLBACKUP_DIR/$LATEST_FULL_BACKUP`

#如果全備有效進(jìn)行增量備份否則執(zhí)行完全備份

if [ "$LATEST_FULL_BACKUP" -a `expr $LATEST_FULL_BACKUP_CREATED_TIME + $FULLBACKUP_INTERVAL + 5` -ge $STARTED_TIME ] ; then

         # 如果最新的全備未過期則以最新的全備文件名命名在增量備份目錄下新建目錄

         echo -e "完全備份$LATEST_FULL_BACKUP未過期,將根據(jù)$LATEST_FULL_BACKUP名字作為增量備份基礎(chǔ)目錄名"

         echo "                                               "

         NEW_INCRDIR=$INCRBACKUP_DIR/$LATEST_FULL_BACKUP

         mkdir -p $NEW_INCRDIR

         # 查找最新的增量備份是否存在.指定一個(gè)備份的路徑作為增量備份的基礎(chǔ)

         LATEST_INCR_BACKUP=`find $NEW_INCRDIR -mindepth 1 -maxdepth 1 -type d -printf "%P\n"  | sort -nr | head -1`

                   if [ ! $LATEST_INCR_BACKUP ] ; then

                            INCRBASEDIR=$FULLBACKUP_DIR/$LATEST_FULL_BACKUP

                            echo -e "增量備份將以$INCRBASEDIR作為備份基礎(chǔ)目錄"

                            echo "                                               "

                   else

                            INCRBASEDIR=$INCRBACKUP_DIR/${LATEST_FULL_BACKUP}/${LATEST_INCR_BACKUP}

                            echo -e "增量備份將以$INCRBASEDIR作為備份基礎(chǔ)目錄"

                            echo "                                               "

                   fi

         echo "使用$INCRBASEDIR作為基礎(chǔ)本次增量備份的基礎(chǔ)目錄."

         $INNOBACKUPEXFULL --defaults-file=$MY_CNF --use-memory=4G $MYSQL_CMD --incremental $NEW_INCRDIR --incremental-basedir $INCRBASEDIR > $TMPLOG 2>&1

         #保留一份備份的詳細(xì)日志

         cat $TMPLOG>/data/pxb/baklog/$logfiledate

         if [ -z "`tail -1 $TMPLOG | grep 'completed OK!'`" ] ; then

          echo "$INNOBACKUPEX命令執(zhí)行失敗:"; echo

          echo -e "---------- $INNOBACKUPEX_PATH錯(cuò)誤 ----------"

          cat $TMPLOG

          rm -f $TMPLOG

          exit 1

         fi

         THISBACKUP=`awk -- "/Backup created in directory/ { split( \\\$0, p, \"'\" ) ; print p[2] }" $TMPLOG`

         rm -f $TMPLOG

         echo -n "數(shù)據(jù)庫成功備份到:$THISBACKUP"

         echo

         # 提示應(yīng)該保留的備份文件起點(diǎn)

         LATEST_FULL_BACKUP=`find $FULLBACKUP_DIR -mindepth 1 -maxdepth 1 -type d -printf "%P\n" | sort -nr | head -1`

         NEW_INCRDIR=$INCRBACKUP_DIR/$LATEST_FULL_BACKUP

         LATEST_INCR_BACKUP=`find $NEW_INCRDIR -mindepth 1 -maxdepth 1 -type d -printf "%P\n"  | sort -nr | head -1`

         RES_FULL_BACKUP=${FULLBACKUP_DIR}/${LATEST_FULL_BACKUP}

         RES_INCRE_BACKUP=`dirname ${INCRBACKUP_DIR}/${LATEST_FULL_BACKUP}/${LATEST_INCR_BACKUP}`

         echo

         echo -e '\e[31m NOTE:---------------------------------------------------------------------------------.\e[m' #紅色

         echo -e "必須保留$KEEP_FULLBACKUP份全備即全備${RES_FULL_BACKUP}和${RES_INCRE_BACKUP}目錄中所有增量備份."

         echo -e '\e[31m NOTE:---------------------------------------------------------------------------------.\e[m' #紅色

         echo

else

         echo  "*********************************"

         echo -e "正在執(zhí)行全新的完全備份...請(qǐng)稍等..."

         echo  "*********************************"

         $INNOBACKUPEXFULL --defaults-file=$MY_CNF  --use-memory=4G  $MYSQL_CMD $FULLBACKUP_DIR > $TMPLOG 2>&1

         #保留一份備份的詳細(xì)日志

         cat $TMPLOG>/data/pxb/baklog/$logfiledate

         if [ -z "`tail -1 $TMPLOG | grep 'completed OK!'`" ] ; then

          echo "$INNOBACKUPEX命令執(zhí)行失敗:"; echo

          echo -e "---------- $INNOBACKUPEX_PATH錯(cuò)誤 ----------"

          cat $TMPLOG

          rm -f $TMPLOG

          exit 1

         fi

         THISBACKUP=`awk -- "/Backup created in directory/ { split( \\\$0, p, \"'\" ) ; print p[2] }" $TMPLOG`

         rm -f $TMPLOG

         echo -n "數(shù)據(jù)庫成功備份到:$THISBACKUP"

         echo

         # 提示應(yīng)該保留的備份文件起點(diǎn)

         LATEST_FULL_BACKUP=`find $FULLBACKUP_DIR -mindepth 1 -maxdepth 1 -type d -printf "%P\n" | sort -nr | head -1`

         RES_FULL_BACKUP=${FULLBACKUP_DIR}/${LATEST_FULL_BACKUP}

         echo

         echo -e '\e[31m NOTE:---------------------------------------------------------------------------------.\e[m' #紅色

         echo -e "無增量備份,必須保留$KEEP_FULLBACKUP份全備即全備${RES_FULL_BACKUP}."

         echo -e '\e[31m NOTE:---------------------------------------------------------------------------------.\e[m' #紅色

         echo

fi

7.2 測(cè)試腳本

## 第一次備份:

[root@orcl ~]# sh mysqlbackup.sh

----------------------------

mysqlbackup.sh: MySQL備份腳本

開始于: 2018-03-21 16:11:21 3

*********************************

正在執(zhí)行全新的完全備份...請(qǐng)稍等...

*********************************

數(shù)據(jù)庫成功備份到:/data/pxb/full/2018-03-21_16-11-21/

 NOTE:---------------------------------------------------------------------------------.

無增量備份,必須保留1份全備即全備/data/pxb/full/2018-03-21_16-11-21.

 NOTE:---------------------------------------------------------------------------------.

[root@orcl ~]# ls -lrht /data/pxb/full/

total 4.0K

drwxr-x--- 5 root root 4.0K Mar 21 16:11 2018-03-21_16-11-21

[root@orcl ~]# ls -lrht /data/pxb/incre/

total 0

[root@orcl ~]# ls -lrht /data/pxb/baklog/

total 20K

-rw-r--r-- 1 root root 18K Mar 21 16:11 backup.201803211611.txt

## 查看備份日志

[root@orcl ~]# tail -4 /data/pxb/baklog/backup.201803211611.txt

180321 16:11:23 [00] Writing xtrabackup_info

180321 16:11:23 [00]        ...done

xtrabackup: Transaction log of lsn (1615930) to (1615930) was copied.

180321 16:11:23 completed OK!

## 第二次備份

[root@orcl ~]# sh mysqlbackup.sh

----------------------------

mysqlbackup.sh: MySQL備份腳本

開始于: 2018-03-21 16:15:11 3

完全備份2018-03-21_16-11-21未過期,將根據(jù)2018-03-21_16-11-21名字作為增量備份基礎(chǔ)目錄名                                          

增量備份將以/data/pxb/full/2018-03-21_16-11-21作為備份基礎(chǔ)目錄

使用/data/pxb/full/2018-03-21_16-11-21作為基礎(chǔ)本次增量備份的基礎(chǔ)目錄.

數(shù)據(jù)庫成功備份到:/data/pxb/incre/2018-03-21_16-11-21/2018-03-21_16-15-11/

 NOTE:---------------------------------------------------------------------------------.

必須保留1份全備即全備/data/pxb/full/2018-03-21_16-11-21和/data/pxb/incre/2018-03-21_16-11-21目錄中所有增量備份.

 NOTE:---------------------------------------------------------------------------------.

## 第三次備份

[root@orcl ~]# sh mysqlbackup.sh

----------------------------

mysqlbackup.sh: MySQL備份腳本

開始于: 2018-03-21 16:15:50 3

完全備份2018-03-21_16-11-21未過期,將根據(jù)2018-03-21_16-11-21名字作為增量備份基礎(chǔ)目錄名                                          

增量備份將以/data/pxb/incre/2018-03-21_16-11-21/2018-03-21_16-15-11作為備份基礎(chǔ)目錄

使用/data/pxb/incre/2018-03-21_16-11-21/2018-03-21_16-15-11作為基礎(chǔ)本次增量備份的基礎(chǔ)目錄.

數(shù)據(jù)庫成功備份到:/data/pxb/incre/2018-03-21_16-11-21/2018-03-21_16-15-50/

 NOTE:---------------------------------------------------------------------------------.

必須保留1份全備即全備/data/pxb/full/2018-03-21_16-11-21和/data/pxb/incre/2018-03-21_16-11-21目錄中所有增量備份.

 NOTE:---------------------------------------------------------------------------------.

## 備份日志

[root@orcl ~]# ls -lrht /data/pxb/baklog/

total 60K

-rw-r--r-- 1 root root 18K Mar 21 16:11 backup.201803211611.txt

-rw-r--r-- 1 root root 20K Mar 21 16:15 backup.201803211615.txt

-rw-r--r-- 1 root root 20K Mar 21 16:17 backup.201803211617.txt

7.3 恢復(fù)測(cè)試

## 先準(zhǔn)備數(shù)據(jù)

mysql> use shaw_db

mysql> create table t_zhong(id int,name varchar(20));

mysql> insert into t_zhong values(100,'name');

## 然后執(zhí)行一次備份腳本

[root@orcl ~]# sh mysqlbackup.sh

----------------------------

mysqlbackup.sh: MySQL備份腳本

開始于: 2018-03-21 16:26:28 3

完全備份2018-03-21_16-11-21未過期,將根據(jù)2018-03-21_16-11-21名字作為增量備份基礎(chǔ)目錄名

增量備份將以/data/pxb/incre/2018-03-21_16-11-21/2018-03-21_16-17-13作為備份基礎(chǔ)目錄

使用/data/pxb/incre/2018-03-21_16-11-21/2018-03-21_16-17-13作為基礎(chǔ)本次增量備份的基礎(chǔ)目錄.

數(shù)據(jù)庫成功備份到:/data/pxb/incre/2018-03-21_16-11-21/2018-03-21_16-26-28/

 NOTE:---------------------------------------------------------------------------------.

必須保留1份全備即全備/data/pxb/full/2018-03-21_16-11-21和/data/pxb/incre/2018-03-21_16-11-21目錄中所有增量備份.

 NOTE:---------------------------------------------------------------------------------.

## 刪除數(shù)據(jù)庫data目錄

[root@orcl ~]# rm -rf /app/mysql/data/

[root@orcl ~]# mkdir /app/mysql/data/

[root@orcl ~]# killall mysql

[root@orcl ~]# killall mysqld

[root@orcl ~]# /etc/init.d/mysqld start

Starting MySQL.The server quit without updating PID file (/[FAILED]l/data/orcl.pid).

## 準(zhǔn)備恢復(fù)數(shù)據(jù)庫

=====>1 準(zhǔn)備全備

[root@orcl ~]# innobackupex --apply-log --redo-only /data/pxb/full/2018-03-21_16-11-21/

# 應(yīng)用增量備份

[root@orcl ~]# ls -lrht /data/pxb/incre/2018-03-21_16-11-21/

total 16K

drwxr-x--- 5 root root 4.0K Mar 21 16:15 2018-03-21_16-15-11

drwxr-x--- 5 root root 4.0K Mar 21 16:15 2018-03-21_16-15-50

drwxr-x--- 5 root root 4.0K Mar 21 16:17 2018-03-21_16-17-13

drwxr-x--- 5 root root 4.0K Mar 21 16:26 2018-03-21_16-26-28

=====>2 應(yīng)用增量備份

[root@orcl ~]# innobackupex --apply-log --redo-only /data/pxb/full/2018-03-21_16-11-21/ --incremental-dir=/data/pxb/incre/2018-03-21_16-11-21/2018-03-21_16-15-11/

[root@orcl ~]# innobackupex --apply-log --redo-only /data/pxb/full/2018-03-21_16-11-21/ --incremental-dir=/data/pxb/incre/2018-03-21_16-11-21/2018-03-21_16-15-50/

[root@orcl ~]# innobackupex --apply-log --redo-only /data/pxb/full/2018-03-21_16-11-21/ --incremental-dir=/data/pxb/incre/2018-03-21_16-11-21/2018-03-21_16-17-13/

=====>3 應(yīng)用最后一個(gè)增量備份

[root@orcl ~]# innobackupex --apply-log /data/pxb/full/2018-03-21_16-11-21/ --incremental-dir=/data/pxb/incre/2018-03-21_16-11-21/2018-03-21_16-17-13/

=====>4 執(zhí)行完整應(yīng)用,回滾未提交事務(wù)

[root@orcl ~]# innobackupex --apply-log /data/pxb/full/2018-03-21_16-11-21/

=====>5 恢復(fù)數(shù)據(jù)庫

[root@orcl ~]# innobackupex --defaults-file=/etc/my.cnf --copy-back --rsync /data/pxb/full/2018-03-21_16-11-21/

## 啟動(dòng)數(shù)據(jù)庫,檢查

[root@orcl ~]# chown -R mysql. /app/mysql/data/

[root@orcl ~]# /etc/init.d/mysqld start

Starting MySQL..                                           [  OK  ]

mysql> use shaw_db;

mysql> select * from t_zhong;

+------+------+

| id   | name |

+------+------+

|  100 | name |

+------+------+

8. 附,自動(dòng)恢復(fù)腳本

####  根據(jù)情況修改

xtrabackup自動(dòng)還原

************************************************************************************************

應(yīng)用場(chǎng)景:

************************************************************************************************

1.備份目錄為/backup/full和/backup/incre的架構(gòu),前者保存全備,后者保存增量備份

2.如全備為/backup/full/2015-04-08_15-14-33則將全備的目錄名2015-04-08_15-14-33

作為/backup/incre/下增量備份的目錄名。這樣設(shè)計(jì)的初衷在于只要全備不過期,那么

這個(gè)全備文件之后的增量備份也不過期.

3.還原時(shí),腳本會(huì)自動(dòng)找到最新的全備和最新全備命名的增量備份目錄,并將增量備份

按照先后順序應(yīng)用日志到全備中,最后完成還原.

************************************************************************************************

腳本

************************************************************************************************

#!/bin/sh

#

# 使用方法:

# ./restore.sh /增量備份父目錄

#ocpyang@126.com

#NOTE:恢復(fù)開始前請(qǐng)確保mysql服務(wù)停止以及數(shù)據(jù)和日志目錄清空,如

# rm -rf /usr/local/mysql/innodb_data/*

# rm -rf /usr/local/mysql/data/*

# rm -rf /usr/local/mysql/mysql_logs/innodb_log/*

INNOBACKUPEX=innobackupex

INNOBACKUPEX_PATH=/usr/local/xtrabackup/bin/$INNOBACKUPEX

TMP_LOG="/var/log/restore.$$.log"

MY_CNF=/usr/local/mysql/my.cnf

BACKUP_DIR=/backup # 你的備份主目錄

FULLBACKUP_DIR=$BACKUP_DIR/full # 全庫備份的目錄

INCRBACKUP_DIR=$BACKUP_DIR/incre # 增量備份的目錄

MEMORY=4096M # 還原的時(shí)候使用的內(nèi)存限制數(shù)

ERRORLOG=`grep -i "^log-error" $MY_CNF |cut -d = -f 2`

MYSQLD_SAFE=/usr/local/mysql/bin/mysqld_safe

MYSQL_PORT=3306

#############################################################################

#顯示錯(cuò)誤

#############################################################################

error()

{

    echo "$1" 1>&2

    exit 1

}

#############################################################################

# 檢查innobackupex錯(cuò)誤輸出

#############################################################################

check_innobackupex_fail()

{

    if [ -z "`tail -2 $TMP_LOG | grep 'completed OK!'`" ] ; then

    echo "$INNOBACKUPEX命令執(zhí)行失敗:"; echo

    echo "---------- $INNOBACKUPEX的錯(cuò)誤輸出 ----------"

    cat $TMP_LOG

    #保留一份備份的詳細(xì)日志

    logfiledate=restore.`date +%Y%m%d%H%M`.txt

    cat $TMP_LOG>/backup/$logfiledate 

    rm -f $TMP_LOG

    exit 1

  fi

}

# 選項(xiàng)檢測(cè)

if [ ! -x $INNOBACKUPEX_PATH ]; then

  error "$INNOBACKUPEX_PATH在指定路徑不存在,請(qǐng)確認(rèn)是否安裝或核實(shí)鏈接是否正確."

fi

if [ ! -d $BACKUP_DIR ]; then

  error "備份目錄$BACKUP_DIR不存在."

fi

if [ $# != 1 ] ; then

  error "使用方法: $0 使用還原目錄的絕對(duì)路徑"

fi

if [ ! -d $1 ]; then

  error "指定的備份目錄:$1不存在."

fi

PORTNUM00=`netstat -lnt|grep ${MYSQL_PORT}|wc -l`

if [ $PORTNUM00 = 1  ];

then

echo -e '\e[31m NOTE:------------------------------------------.\e[m' #紅色

echo -e '\e[31m mysql處于運(yùn)行狀態(tài),請(qǐng)關(guān)閉mysql. \e[m' #紅色

echo -e '\e[31m NOTE:------------------------------------------.\e[m' #紅色

exit 0

fi      

input_value=$1

intpu_res=`echo ${input_value%/*}`

# Some info output

echo "----------------------------"

echo

echo "$0: MySQL還原腳本"

START_RESTORE_TIME=`date +%F' '%T' '%w`

echo "數(shù)據(jù)庫還原開始于: $START_RESTORE_TIME"

echo

#PARENT_DIR=`dirname ${intpu_res}`

PARENT_DIR=${intpu_res}

if [ $PARENT_DIR = $FULLBACKUP_DIR ]; then

         FULLBACKUP=${intpu_res}

         echo "還原全備備份:`basename $FULLBACKUP`"

         echo

else

         if [ $PARENT_DIR = $INCRBACKUP_DIR ]; then

                   FULL=`ls -t $FULLBACKUP_DIR |head -1`

                   FULLBACKUP=$FULLBACKUP_DIR/$FULL

                            if [ ! -d $FULLBACKUP ]; then

                            error "全備:$FULLBACKUP不存在."

                            fi

                   INCR=`ls -t $INCRBACKUP_DIR/$FULL/ | head -1`

                   echo "還原將從全備$FULL開始,到增量$INCR結(jié)束."

                   echo

                   echo "Prepare:完整備份集..........."

                   echo "*****************************"

                   $INNOBACKUPEX_PATH --defaults-file=$MY_CNF --apply-log --redo-only --use-memory=$MEMORY $FULLBACKUP > $TMP_LOG 2>&1

                   check_innobackupex_fail

            # Prepare增量備份集,即將增量備份應(yīng)用到全備目錄中,按照增量備份順序即按照時(shí)間從舊到最新

                   for i in `find $PARENT_DIR/$FULL -mindepth 1 -maxdepth 1 -type d -printf "%P\n" | sort -n `;

                   do

                            #判斷最新全備的lsn

                            #check_full_file=`find $FULLBACKUP/ -mindepth 1 -maxdepth 1 -type d -printf "%P\n" | sort -nr | head  -1`

                            check_full_lastlsn=$FULLBACKUP/xtrabackup_checkpoints

                            fetch_full_lastlsn=`grep -i "^last_lsn" ${check_full_lastlsn} |cut -d = -f 2`

                            ######判斷增量備份中第一個(gè)增量備份的LSN

                            check_incre_file=`find $PARENT_DIR/$FULL -mindepth 1 -maxdepth 1 -type d -printf "%P\n" | sort -n |  head -1`

                            check_incre_lastlsn=$PARENT_DIR/$FULL/$i/xtrabackup_checkpoints

                            fetch_incre_lastlsn=`grep -i "^last_lsn" ${check_incre_lastlsn} |cut -d = -f 2`

                            echo "完全備份的LSN:${fetch_full_lastlsn} "

                            echo "增量備份的LSN:${fetch_incre_lastlsn} "

                                     if [ "${fetch_incre_lastlsn}" -eq "${fetch_full_lastlsn}" ];then

                                               echo "*****************************************"

                                               echo "LSN不需要prepare!"

                                               echo "*****************************************"

                                               echo

                                               break

                                     else

                                               echo "Prepare:增量備份集$i........"

                                               echo "*****************************"

                                               $INNOBACKUPEX_PATH --defaults-file=$MY_CNF --apply-log --redo-only --use-memory=$MEMORY $FULLBACKUP --incremental-dir=$PARENT_DIR/$FULL/$i > $TMP_LOG 2>&1

                                               check_innobackupex_fail

                                               if [ $INCR = $i ]; then

                                               break

                                               fi

                                     fi

                            ######判斷LSN

                   done

         else

                   error "未知的備份類型"

         fi

fi

echo "prepare:全備集回滾那些未提交的事務(wù)..........."

$INNOBACKUPEX_PATH --defaults-file=$MY_CNF --apply-log --use-memory=$MEMORY $FULLBACKUP > $TMP_LOG 2>&1

check_innobackupex_fail

echo "*****************************"

echo "數(shù)據(jù)庫還原中 ...請(qǐng)稍等"

echo "*****************************"

$INNOBACKUPEX_PATH --defaults-file=$MY_CNF --copy-back $FULLBACKUP > $TMP_LOG 2>&1

check_innobackupex_fail

rm -f $TMP_LOG

echo "1.恭喜,還原成功!."

echo "*****************************"

#修改目錄權(quán)限

echo "修改mysql目錄的權(quán)限."

mysqlcnf="/usr/local/mysql/my.cnf"

mysqldatadir=`grep -i "^basedir" $mysqlcnf |cut -d = -f 2`

`echo 'chown -R mysql:mysql' ${mysqldatadir}`

echo "2.權(quán)限修改成功!"

echo "*****************************"

#自動(dòng)啟動(dòng)mysql

INIT_NUM=1

if [ ! -x $MYSQLD_SAFE ]; then

  echo "mysql安裝時(shí)啟動(dòng)文件未安裝到$MYSQLD_SAFE或無執(zhí)行權(quán)限"

  exit 1  #0是執(zhí)行成功,1是執(zhí)行不成功

else

         echo "啟動(dòng)本機(jī)mysql端口為:$MYSQL_PORT的服務(wù)"

         $MYSQLD_SAFE --defaults-file=$MY_CNF  > /dev/null &

         while  [ $INIT_NUM  -le 6 ]

            do

                 PORTNUM=`netstat -lnt|grep ${MYSQL_PORT}|wc -l`

                 echo "mysql啟動(dòng)中....請(qǐng)稍等..."

                 sleep 5

                           if [ $PORTNUM = 1  ];

                           then

                         echo "mysql                                      ****啟動(dòng)成功****"

                           exit 0

                           fi      

                 INIT_NUM=$(($INIT_NUM +1))

            done

       echo -e "mysql啟動(dòng)失敗或啟動(dòng)時(shí)間過長,請(qǐng)檢查錯(cuò)誤日志 `echo 'cat ' ${ERRORLOG}`"

         echo "*****************************************"

         exit 0

fi

END_RESTORE_TIME=`date +%F' '%T' '%w`

echo "數(shù)據(jù)庫還原完成于: $END_RESTORE_TIME"

exit 0

************************************************************************************************

執(zhí)行結(jié)果:

************************************************************************************************

 執(zhí)行結(jié)果如下:

 #./restore.sh  /backup/incre/

----------------------------

./restore.sh: MySQL還原腳本

數(shù)據(jù)庫還原開始于: 2015-04-08 15:17:14 3

還原將從全備2015-04-08_15-14-33開始,到增量2015-04-08_15-16-06結(jié)束.

Prepare:完整備份集...........

*****************************

完全備份的LSN: 62974601

增量備份的LSN: 124278446

Prepare:增量備份集2015-04-08_15-15-25........

*****************************

完全備份的LSN: 124278446

增量備份的LSN: 185584722

Prepare:增量備份集2015-04-08_15-16-06........

*****************************

prepare:全備集回滾那些未提交的事務(wù)...........

*****************************

數(shù)據(jù)庫還原中 ...請(qǐng)稍等

*****************************

1.恭喜,還原成功!.

*****************************

修改mysql目錄的權(quán)限.

2.權(quán)限修改成功!

*****************************

啟動(dòng)本機(jī)mysql端口為:3306的服務(wù)

3.mysql啟動(dòng)中....請(qǐng)稍等...

3.mysql啟動(dòng)中....請(qǐng)稍等...

3.mysql啟動(dòng)中....請(qǐng)稍等...

mysql                                      ****啟動(dòng)成功****

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“xtrabackup如何實(shí)現(xiàn)MySQL自動(dòng)備份恢復(fù)”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI