xtrabackup原理及用法詳解-創(chuàng)新互聯

開源的一款數據庫備份工具,可以去官網下載并使用

“專業(yè)、務實、高效、創(chuàng)新、把客戶的事當成自己的事”是我們每一個人一直以來堅持追求的企業(yè)文化。 創(chuàng)新互聯是您可以信賴的網站建設服務商、專業(yè)的互聯網服務提供商! 專注于成都網站設計、成都做網站、軟件開發(fā)、設計服務業(yè)務。我們始終堅持以客戶需求為導向,結合用戶體驗與視覺傳達,提供有針對性的項目解決方案,提供專業(yè)性的建議,創(chuàng)新互聯建站將不斷地超越自我,追逐市場,引領市場!

percona-backupxtra對InonoDB會進行增量備份,面對MyISAM的數據進持完全備份。

1 xtrabackup只能備份innodb和xtradb兩種引擎的表,而不能備份myisam引擎的表;

2 innobackupex是一個封裝了xtrabackup的Perl腳本,支持同時備份innodb和myisam,但在對myisam備份時需要加一個全局的讀鎖。還有就是myisam不支持增量備份。

3 另外2個工具相對小眾些,xbcrypt 是加解密用的;xbstream 類似于tar,是 Percona 自己實現的一種支持并發(fā)寫的流文件格式。兩都在備份和解壓時都會用到(如果備份用了加密和并發(fā))。

mysql:表是MyISAM引擎,讀多寫少,性能好。

實現方式:說實話,看這個不如看備份產生的信息,產生的信息中每一步都顯示出來,能更好帶你了解innobackupex 是如何備份的。

1 首先會啟動一個xtrabackup_log后臺檢測的進程,實時檢測mysql redo的變化,一旦發(fā)現redo有新的日志寫入,立刻將日志寫入到日志文件xtrabackup_log中

2 復制innodb的數據文件和系統(tǒng)表空間文件idbdata1到對應的以默認時間戳為備份目錄的地方

3 復制結束后,執(zhí)行flush table with read lock操作

4 復制.frm .myd .myi文件

5 并且在這一時刻獲得binary log 的位置

6 將表進行解鎖unlock tables

7 停止xtrabackup_log進程

xtrabackup原理及用法詳解

完全備份:

# innobackupex --user=root --password=mysql /PATH/TO/BACKUP-DIR/

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

> CREATE USER 'bkpuser'@'localhost' IDENRIFIED BY 'PASSWORD';

> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'bkpuser';

> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'bkpuser'@'localhost';

> FLUSH PRIVILEGES;

The RELOAD privilege enables use of the FLUSH statement. It also enables mysqladmin commands that are equivalent to FLUSH operations: flush-hosts, flush-logs, flush-privileges, flush-status, flush-tables, flush-threads, refresh, and reload.

The REPLICATION CLIENT privilege enables the use of the SHOW MASTER STATUS, SHOW SLAVE STATUS, and SHOW BINARY LOGS statements.

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

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

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

每個InnoDB頁(通常為16K大?。┒紩粋€日志序列號,即LSN,LSN是整個數據庫系統(tǒng)的系統(tǒng)版本號,每個頁面相關的LSN能夠表明此頁最近是如何發(fā)生改變的。

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

3)xtrabackup_info備份的信息集合

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

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

(6)xtrabackup_checkpoints

backup_type = full-backuped

from_lsn = 0 從哪個數據塊開始備份

to_lsn = 1637454備份到哪里

last_lsn = 1637454最后的數據塊

會維護每個數據塊的日志序列號,如果數據發(fā)生改變,日志序列號就會往前走一次的,所以它可以根據這個號碼來進行增量備份。發(fā)生改變就備份,沒有改變就不用備份了。

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

一般情況下,在備份完成后,數據尚且不能用于恢復操作,因為備份的數據中可能會包含尚未提交的事務或已經提交但尚且未同步至數據文件中的事務。因此,此時數據文件仍處理不一致狀態(tài)。“準備”的主要作用正是通過回滾未提交的事務及同步已經提交的事務至數據文件也使得數據文件處于一致性狀態(tài)。

3、從一個完全備份中恢復數據

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

# innobackupex --copy-back /PATH/TO/BACKUP-DIR/     //--copy-back 或 --force-non-empty-directories

    datadir必須是為空的,innobackupex –copy-back不會覆蓋已存在的文件

還原時需要先關閉服務,如果服務是啟動的,那么就不能還原到datadir。

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

innobackupex: Starting to copy InnoDB log file

...

innobackupex: Finished copying back files.

innobackupex: completed OK!

請確保如上信息的最后一行出現“completed OK!”

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

chown -R mysql.msyql /data/

4、使用innobackupex進行增量備份

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

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

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

ex:

innobackupex --user=root --password=mysql --incremental-basedir=/backup/2017-03-29_12-32-56/ --incremental /backup/

下一個增量備份要以之前的增量備份上做備份,也就是說--incremental-basedir=上一個新增的目錄,而不是全備的。

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

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

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

(1)需要在每個備份(包括完全和各個增量備份)上,將已經提交的事務進行“重放”,“重放”之后,所有的備份數據將合并到完全備份上。

(2)基于所有的備份將未提交的事務進行“回滾”。

于是,操作就變成了:

#innobackupex --apply-log --redo-only BACKUP-DIR\//每一次的BACKUP-DIR都是全量備份文件的位置

接著執(zhí)行:

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

而后是第二個增量:

# innobackupex --apply-log --redo-only BACKUP-DIR(這里的目錄不是完全備份的目錄,面是上一次增量備份的目錄,因為是在上一次增量備份的基礎上還原的) --incremental-dir=INCREMENTAL-DIR-2

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

首先準備文件

我的數據庫數據在/data/下用LVM做的,我在這還要強調一下,二進制日志必須與數據不在同一個磁盤上,這一點怎么提醒都不為過,最好日志能放到raid1有鏡像的地方上去。

mkdir /backup/

1、# innobackupex --user=root --password=mysql /backup///進行完全備份

2、# innobackupex --user=root --password=mysql --incremental-basedir=/backup/2017-03-29_13-49-52/ --incremental /backup/進行第一次增量備份

3、# innobackupex --user=root --password=mysql --incremental-basedir=/backup/2017-03-29_12-49-52/ --incremental /backup/進行第二次增量備份

4、# innobackupex --apply-log --redo-only /backup/2017-03-29_12-32-56///第一次全量恢復,但是數據沒有回/data目錄下

5、# nnobackupex --apply-log --redo-only /backup/2017-03-29_12-32-56/ --incremental-dir=/backup/2017-03-29_13-49-52/   //恢復第一次增量備份

6、# innobackupex --apply-log --redo-only /backup/2017-03-29_12-32-56/ --incremental-dir=/backup/2017-03-29_13-53-57///恢復第二次增量備份

7、# innobackupex --copy-back /backup/2017-03-29_12-32-56///進行回滾操作,因為之前做過perpare操作,所以直接回滾就可以了,數據就回來了

8、# chown -R mysql.mysql /data/*

9、# service mysqld start//如果這時候出現Starting MySQL.. ERROR! The server quit without updating PID file (/var/mysql/data/localhost.localdomain.pid).

你就可以killall mysqld   把之前殘留的進程殺死,在啟動

另外有需要云服務器可以了解下創(chuàng)新互聯cdcxhl.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

本文標題:xtrabackup原理及用法詳解-創(chuàng)新互聯
網頁地址:http://muchs.cn/article46/djgheg.html

成都網站建設公司_創(chuàng)新互聯,為您提供自適應網站、品牌網站建設、定制開發(fā)、網站收錄、靜態(tài)網站網站內鏈

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯

成都網頁設計公司