一、基礎(chǔ)知識(shí)
成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、成都外貿(mào)網(wǎng)站建設(shè)介紹好的網(wǎng)站是理念、設(shè)計(jì)和技術(shù)的結(jié)合。創(chuàng)新互聯(lián)公司擁有的網(wǎng)站設(shè)計(jì)理念、多方位的設(shè)計(jì)風(fēng)格、經(jīng)驗(yàn)豐富的設(shè)計(jì)團(tuán)隊(duì)。提供PC端+手機(jī)端網(wǎng)站建設(shè),用營(yíng)銷思維進(jìn)行網(wǎng)站設(shè)計(jì)、采用先進(jìn)技術(shù)開源代碼、注重用戶體驗(yàn)與SEO基礎(chǔ),將技術(shù)與創(chuàng)意整合到網(wǎng)站之中,以契合客戶的方式做到創(chuàng)意性的視覺化效果。
MySQLdump是mysql自帶的一個(gè)單線程的邏輯備份工具,當(dāng)數(shù)據(jù)量很大時(shí),使用mysqldump備份的時(shí)間會(huì)非常長(zhǎng),且無(wú)法做增量備份,xtrabackup是一款基于底層塊復(fù)制、開源的備份工具,可以對(duì)數(shù)據(jù)庫(kù)在線實(shí)現(xiàn)備份。xtrabackup支持對(duì)Innodb和Xtradb存儲(chǔ)引擎的完全、增量和差異備份,對(duì)于不支持事物的MyISAM存儲(chǔ)引擎只能完全備份。
二、備份工具
Xtrabackup工具用到的命令為xtrabackup和innobackupex,而innobackupex又是將xtrabackup使用perl腳本語(yǔ)言封裝的二次版本,其目的時(shí)為了便于使用
本文重點(diǎn)介紹innobackupex為例,介紹完全備份、增量備份和差異備份
三、實(shí)驗(yàn)說(shuō)明
本次實(shí)驗(yàn)采用CentOS7.4系統(tǒng),數(shù)據(jù)庫(kù)版本為MariaDB 5.5.56,innobackupex 版本為2.3.6。
1.完全備份
(1)創(chuàng)建備份賬戶
MariaDB [hellodb]> grant all privileges on *.* to 'backup'@'localhost' identified by 'backuppassword';
MariaDB [hellodb]> flush privileges;
(2)創(chuàng)建備份目錄
[root@node1 ~]# mkdir -pv /data/back
[root@node1 ~]# chown -R mysql.mysql /data/back
(3)執(zhí)行備份
innobackupex --defaults-file=/etc/my.cnf --user=backup --password=backuppassword /data/back
看到completed OK!提示后表示備份成功,上述命令還可以使用--databases="db1 db2"來(lái)備份制定的庫(kù),或者使用--no-timestamp不自動(dòng)生成時(shí)間戳
(4)關(guān)閉數(shù)據(jù)庫(kù)服務(wù),刪除數(shù)據(jù),模擬數(shù)據(jù)庫(kù)損壞
[root@node1 back]# systemctl stop mariadb.service
(5)恢復(fù)前準(zhǔn)備(將已提交的事物同步到磁盤,未提交的事務(wù)回滾)
innobackupex --defaults-file=/etc/my.cnf --user=backup --password=backuppassword --apply-log /data/back/2018-04-24_07-38-47/
(6)恢復(fù)數(shù)據(jù)(如果用root賬號(hào)操作,需要更改恢復(fù)后數(shù)據(jù)目錄的屬組和屬主)
innobackupex --defaults-file=/etc/my.cnf --user=backup --password=backuppassword --copy-back /data/back/2018-04-24_07-38-47/
(7)重啟數(shù)據(jù)庫(kù)服務(wù),至此操作完成
2.增量備份
增量備份的實(shí)現(xiàn)是根據(jù)每一個(gè)Innodb頁(yè)都有一個(gè)log sequence number(LSN),當(dāng)數(shù)據(jù)發(fā)生變化時(shí),其所在的Innodb頁(yè)的LSN會(huì)自動(dòng)增長(zhǎng),增量備份就是根據(jù)LSN的范圍序列實(shí)現(xiàn)備份,每次備份的LSN號(hào)可以在xtrabackup_checkpoints中查看。其備份的方式與全備略有不同,增量備份需要給予一個(gè)全被或者上一次增量來(lái)進(jìn)行,具體步驟如下:
(1)創(chuàng)建一個(gè)完全備份
[root@node1 ~]# innobackupex --defaults-file=/etc/my.cnf --user=backup --password=backuppassword /data/back
(2)基于已創(chuàng)建的完全備份,做增量備份
[root@node1 ~]# innobackupex --defaults-file=/etc/my.cnf --user=backup --password=backuppassword --incremental /data/incremental/ --incremental-basedir=/data/back/2018-04-25_06-32-18/
(3)基于已第一次創(chuàng)建的增量備份,做第二次增量備份(將--incremental-basedir指向完備份,則做的是差異備份)
[root@node1 ~]# innobackupex --defaults-file=/etc/my.cnf --user=backup --password=backuppassword --incremental /data/incremental/ --incremental-basedir=/data/incremental/2018-04-25_06-34-15/
(4)刪除數(shù)據(jù)庫(kù)文件,模擬故障(提前保存二進(jìn)制文件,備份到故障發(fā)生點(diǎn)之間的還原還需要通過(guò)二進(jìn)制文件)
[root@node1 ~]# cat /data/incremental/2018-04-25_06-39-57/xtrabackup_binlog_info
[root@node1 ~]# mysqlbinlog --start-position=1721 mysql-binlog.000002 > /data/incremental/binlog.sql
[root@node1 ~]# systemctl stop mariadb.service
[root@node1 ~]# rm -rf /var/lib/mysql*
(5)恢復(fù)前準(zhǔn)備(出除最后一個(gè)增量外其他都需要使用--redo-only選項(xiàng),其作用是不進(jìn)行回滾操作,因?yàn)樵隽?中未提交的事務(wù)在增量2中可能會(huì)提交,所以不回滾。最后1個(gè)增量也可以用--redo-only選項(xiàng),就算他不回滾,根據(jù)mariadb的crash-recover機(jī)制,啟動(dòng)時(shí)也會(huì)回滾未提交事務(wù))
[root@node1 ~]# innobackupex --apply-log --redo-only /data/back/2018-04-25_06-32-18/
[root@node1 ~]# innobackupex --apply-log --redo-only /data/back/2018-04-25_06-32-18/ --incremental-dir=/data/incremental/2018-04-25_06-34-15/
[root@node1 ~]# innobackupex --apply-log --redo-only /data/back/2018-04-25_06-32-18/ --incremental-dir=/data/incremental/2018-04-25_06-39-57/
[root@node1 ~]# chown -R mysql.mysql /var/lib/mysql
(6)恢復(fù)數(shù)據(jù)庫(kù)
[root@node1 ~]# innobackupex --copy-back /data/back/2018-04-25_06-32-18/
[root@node1 ~]# mysql < /data/incremental/binlog.sql
補(bǔ)充說(shuō)明:
1.xtrabackup是通過(guò)讀取LSN從而指導(dǎo)數(shù)據(jù)的更改的每一個(gè)innodb page頁(yè)的大小默認(rèn)是16K,實(shí)際測(cè)試中發(fā)現(xiàn),如果數(shù)據(jù)量變化很小,即使binlog中的position發(fā)生了變了,使用增量備份的時(shí)候LSN號(hào)不會(huì)發(fā)生變化,但是恢復(fù)后的數(shù)據(jù)是一致的
2.在恢復(fù)增量備份的準(zhǔn)備階段時(shí)--incremental-dir選項(xiàng)后面不能使用相對(duì)路徑,否則會(huì)提示找不到要恢復(fù)增量備份的xtrabackup_logfile