開源的一款數(shù)據(jù)庫(kù)備份工具,可以去官網(wǎng)下載并使用
“專業(yè)、務(wù)實(shí)、高效、創(chuàng)新、把客戶的事當(dāng)成自己的事”是我們每一個(gè)人一直以來(lái)堅(jiān)持追求的企業(yè)文化。 創(chuàng)新互聯(lián)是您可以信賴的網(wǎng)站建設(shè)服務(wù)商、專業(yè)的互聯(lián)網(wǎng)服務(wù)提供商! 專注于成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、軟件開發(fā)、設(shè)計(jì)服務(wù)業(yè)務(wù)。我們始終堅(jiān)持以客戶需求為導(dǎo)向,結(jié)合用戶體驗(yàn)與視覺傳達(dá),提供有針對(duì)性的項(xiàng)目解決方案,提供專業(yè)性的建議,創(chuàng)新互聯(lián)建站將不斷地超越自我,追逐市場(chǎng),引領(lǐng)市場(chǎng)!percona-backupxtra對(duì)InonoDB會(huì)進(jìn)行增量備份,面對(duì)MyISAM的數(shù)據(jù)進(jìn)持完全備份。
1 xtrabackup只能備份innodb和xtradb兩種引擎的表,而不能備份myisam引擎的表;
2 innobackupex是一個(gè)封裝了xtrabackup的Perl腳本,支持同時(shí)備份innodb和myisam,但在對(duì)myisam備份時(shí)需要加一個(gè)全局的讀鎖。還有就是myisam不支持增量備份。
3 另外2個(gè)工具相對(duì)小眾些,xbcrypt 是加解密用的;xbstream 類似于tar,是 Percona 自己實(shí)現(xiàn)的一種支持并發(fā)寫的流文件格式。兩都在備份和解壓時(shí)都會(huì)用到(如果備份用了加密和并發(fā))。
mysql:表是MyISAM引擎,讀多寫少,性能好。
實(shí)現(xiàn)方式:說實(shí)話,看這個(gè)不如看備份產(chǎn)生的信息,產(chǎn)生的信息中每一步都顯示出來(lái),能更好帶你了解innobackupex 是如何備份的。
1 首先會(huì)啟動(dòng)一個(gè)xtrabackup_log后臺(tái)檢測(cè)的進(jìn)程,實(shí)時(shí)檢測(cè)mysql redo的變化,一旦發(fā)現(xiàn)redo有新的日志寫入,立刻將日志寫入到日志文件xtrabackup_log中
2 復(fù)制innodb的數(shù)據(jù)文件和系統(tǒng)表空間文件idbdata1到對(duì)應(yīng)的以默認(rèn)時(shí)間戳為備份目錄的地方
3 復(fù)制結(jié)束后,執(zhí)行flush table with read lock操作
4 復(fù)制.frm .myd .myi文件
5 并且在這一時(shí)刻獲得binary log 的位置
6 將表進(jìn)行解鎖unlock tables
7 停止xtrabackup_log進(jìn)程
完全備份:
# innobackupex --user=root --password=mysql /PATH/TO/BACKUP-DIR/
如果要使用一個(gè)最小權(quán)限的用戶進(jìn)行備份,則可基于如下命令創(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備份時(shí),其會(huì)調(diào)用xtrabackup備份所有的InnoDB表,復(fù)制所有關(guān)于表結(jié)構(gòu)定義的相關(guān)文件(.frm)心及MyISAM、MERGE、CSV和ARCHIVE表的相關(guān)文件,同時(shí)還會(huì)備份觸發(fā)器和數(shù)據(jù)庫(kù)配置信息相關(guān)的文件。這些文件會(huì)被保存至一個(gè)以時(shí)間命令的目錄中。
在備份的同時(shí),innobackupex還會(huì)備份目錄中創(chuàng)建如下文件:
(1)xtrabackup_checkpoints 備份類型(如完全或增量)、備份狀態(tài)(如是否已經(jīng)為prepared狀態(tài))和LSN(日志序列號(hào))范圍信息;
每個(gè)InnoDB頁(yè)(通常為16K大?。┒紩?huì)包含一個(gè)日志序列號(hào),即LSN,LSN是整個(gè)數(shù)據(jù)庫(kù)系統(tǒng)的系統(tǒng)版本號(hào),每個(gè)頁(yè)面相關(guān)的LSN能夠表明此頁(yè)最近是如何發(fā)生改變的。
(2)xtrabackup_binlog_infomysql服務(wù)器當(dāng)前正在使用的二進(jìn)制日志文件及至備份這一刻為止二進(jìn)制日志事件的位置。
3)xtrabackup_info備份的信息集合
(4)xtrabackup_binary 備份中用到的xtrabackup的可執(zhí)行文件;
(5)backup-my.cnf備份命令用到的配置選項(xiàng)信息;
(6)xtrabackup_checkpoints
backup_type = full-backuped
from_lsn = 0 從哪個(gè)數(shù)據(jù)塊開始備份
to_lsn = 1637454備份到哪里
last_lsn = 1637454最后的數(shù)據(jù)塊
會(huì)維護(hù)每個(gè)數(shù)據(jù)塊的日志序列號(hào),如果數(shù)據(jù)發(fā)生改變,日志序列號(hào)就會(huì)往前走一次的,所以它可以根據(jù)這個(gè)號(hào)碼來(lái)進(jìn)行增量備份。發(fā)生改變就備份,沒有改變就不用備份了。
在使用innobackupex進(jìn)行備份時(shí),還可以用--no-timestamp選項(xiàng)來(lái)阻止命令自動(dòng)創(chuàng)建一個(gè)以時(shí)間命名的目錄,如此一來(lái),innobackupex命令將會(huì)創(chuàng)建一個(gè)BACKUP-DIR目錄來(lái)存儲(chǔ)備份數(shù)據(jù)。
一般情況下,在備份完成后,數(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)。
3、從一個(gè)完全備份中恢復(fù)數(shù)據(jù)
innobackupex命令的--copy-back選項(xiàng)用于執(zhí)行恢復(fù)操作,其通過復(fù)制所有數(shù)據(jù)相關(guān)的文件至mysql服務(wù)器DATADIR目錄中來(lái)執(zhí)行恢復(fù)過程。innobackupex通過backup-my.cnf來(lái)獲取DATADIR目錄的相關(guān)信息。
# innobackupex --copy-back /PATH/TO/BACKUP-DIR/ //--copy-back 或 --force-non-empty-directories
datadir必須是為空的,innobackupex –copy-back不會(huì)覆蓋已存在的文件
還原時(shí)需要先關(guān)閉服務(wù),如果服務(wù)是啟動(dòng)的,那么就不能還原到datadir。
如果執(zhí)行正確,其輸出信息的最后幾行通常如下:
innobackupex: Starting to copy InnoDB log file
...
innobackupex: Finished copying back files.
innobackupex: completed OK!
請(qǐng)確保如上信息的最后一行出現(xiàn)“completed OK!”
當(dāng)數(shù)據(jù)恢復(fù)至DATADIR目錄后,還需要確保所有數(shù)據(jù)文件的屬主和屬組均為正確的用戶,如mysql,否則,在啟動(dòng)mysqld之前還需要先修改文件的屬主和屬組,如:
chown -R mysql.msyql /data/
4、使用innobackupex進(jìn)行增量備份
每個(gè)InnoDB的頁(yè)面都會(huì)包含一個(gè)LSN信息,每當(dāng)相關(guān)的數(shù)據(jù)發(fā)生改變,相關(guān)的頁(yè)面的LSN就會(huì)自動(dòng)增長(zhǎng)。這正是InnoDB表可以進(jìn)行增量備份的甚而,即innobackupex通過備份上次完全備份之后發(fā)生改變的頁(yè)面來(lái)實(shí)現(xiàn)。
要實(shí)現(xiàn)第一次增量備份,可以使用下面的命令進(jìn)行:
# innobackupex --incremental /backup --incremental-dir=BASEDIR
ex:
innobackupex --user=root --password=mysql --incremental-basedir=/backup/2017-03-29_12-32-56/ --incremental /backup/
下一個(gè)增量備份要以之前的增量備份上做備份,也就是說--incremental-basedir=上一個(gè)新增的目錄,而不是全備的。
其中,BASEDIR指的是完全備份所在的目錄,此命令執(zhí)行結(jié)束后,innobackupex命令會(huì)在/backup目錄中創(chuàng)建一個(gè)新的以時(shí)間命名的目錄以存放所有的增量備份數(shù)據(jù)。另外,在執(zhí)行過增量備份之后再一次進(jìn)行增量備份時(shí),其--incremental-dir應(yīng)該指向上一次完全備份所在的目錄。
需要注意的是,增量備份僅能應(yīng)用于InnoDB或XtraDB表,對(duì)于MyISAM表而言,執(zhí)行增量備份其實(shí)進(jìn)行的是完全備份,
“prepare”增量備份與整理完全備份有著一些不同,尤其要注意的是:
(1)需要在每個(gè)備份(包括完全和各個(gè)增量備份)上,將已經(jīng)提交的事務(wù)進(jìn)行“重放”,“重放”之后,所有的備份數(shù)據(jù)將合并到完全備份上。
(2)基于所有的備份將未提交的事務(wù)進(jìn)行“回滾”。
于是,操作就變成了:
#innobackupex --apply-log --redo-only BACKUP-DIR\//每一次的BACKUP-DIR都是全量備份文件的位置
接著執(zhí)行:
# innobackupex --apply-log --redo-only BACKUP-DIR --incremental-dir=INCREMENTAL-DIR-1
而后是第二個(gè)增量:
# innobackupex --apply-log --redo-only BACKUP-DIR(這里的目錄不是完全備份的目錄,面是上一次增量備份的目錄,因?yàn)槭窃谏弦淮卧隽總浞莸幕A(chǔ)上還原的) --incremental-dir=INCREMENTAL-DIR-2
其中BASE-DIR指的是完全備份所在的目錄,而INCREMENTAL-DIR-1 指的是第一次增量備份的目錄,INCREMENTAL-DIR-2指的是第二次增量備份的目錄,其它依次類推,即如果有多次增量備份,第一次都要執(zhí)行如上操作;
首先準(zhǔn)備文件
我的數(shù)據(jù)庫(kù)數(shù)據(jù)在/data/下用LVM做的,我在這還要強(qiáng)調(diào)一下,二進(jìn)制日志必須與數(shù)據(jù)不在同一個(gè)磁盤上,這一點(diǎn)怎么提醒都不為過,最好日志能放到raid1有鏡像的地方上去。
mkdir /backup/
1、# innobackupex --user=root --password=mysql /backup///進(jìn)行完全備份
2、# innobackupex --user=root --password=mysql --incremental-basedir=/backup/2017-03-29_13-49-52/ --incremental /backup/進(jìn)行第一次增量備份
3、# innobackupex --user=root --password=mysql --incremental-basedir=/backup/2017-03-29_12-49-52/ --incremental /backup/進(jìn)行第二次增量備份
4、# innobackupex --apply-log --redo-only /backup/2017-03-29_12-32-56///第一次全量恢復(fù),但是數(shù)據(jù)沒有回/data目錄下
5、# nnobackupex --apply-log --redo-only /backup/2017-03-29_12-32-56/ --incremental-dir=/backup/2017-03-29_13-49-52/ //恢復(fù)第一次增量備份
6、# innobackupex --apply-log --redo-only /backup/2017-03-29_12-32-56/ --incremental-dir=/backup/2017-03-29_13-53-57///恢復(fù)第二次增量備份
7、# innobackupex --copy-back /backup/2017-03-29_12-32-56///進(jìn)行回滾操作,因?yàn)橹白鲞^perpare操作,所以直接回滾就可以了,數(shù)據(jù)就回來(lái)了
8、# chown -R mysql.mysql /data/*
9、# service mysqld start//如果這時(shí)候出現(xiàn)Starting MySQL.. ERROR! The server quit without updating PID file (/var/mysql/data/localhost.localdomain.pid).
你就可以killall mysqld 把之前殘留的進(jìn)程殺死,在啟動(dòng)
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。