MySQL數(shù)據(jù)庫的備份案例
MySQL企業(yè)備份案列
前言:上篇文檔分享了MySQL數(shù)據(jù)庫的幾種備份方法,以及各自的特點(diǎn)。下面我們通過一個(gè)企業(yè)級(jí)的備份案例了解一下MySQL數(shù)據(jù)庫的常見備份和恢復(fù)。(如果有看不懂的地方,可以參考小編主頁的上篇文檔:怎么對(duì)MySQL數(shù)據(jù)庫進(jìn)行備份與恢復(fù))
案例:
需求描述:某某公司的用戶信息數(shù)據(jù)庫為client,用戶資費(fèi)數(shù)據(jù)表為user_info,該公司每周需要進(jìn)行完全備份,每天需要進(jìn)行增量備份。新增的用戶信息如下表所示:
一、一般恢復(fù)
1.添加數(shù)據(jù)庫、表、錄入信息
在進(jìn)行備份前,先根據(jù)需求創(chuàng)建用戶信息數(shù)據(jù)庫client、用戶資費(fèi)數(shù)據(jù)表user_info,并且根據(jù)需求描述中的表格插入前三條用戶的數(shù)據(jù)。 如下圖:
2.先進(jìn)行一次完全備份
為了方便驗(yàn)證二進(jìn)制日志的增量恢復(fù)功能,我們?cè)诓迦肴龡l用戶數(shù)據(jù)后先對(duì)client數(shù)據(jù)庫的user_info數(shù)據(jù)表進(jìn)行一次完全備份,然后在linux系統(tǒng)命令行下執(zhí)行"mysqladmin -u root -p flush-logs"命令或在"mysql>"命令提示符下執(zhí)行"flush logs;"生成新的二進(jìn)制日志。如下圖:
3.繼續(xù)錄入新的數(shù)據(jù)并進(jìn)行增量備份
繼續(xù)錄入兩個(gè)用戶的數(shù)據(jù),并執(zhí)行"mysqladmin -u root -p flush-logs"命令刷新二進(jìn)制日志,進(jìn)行增量備份。這樣,二進(jìn)制日志文件mysql-bin.000003中僅保留插入兩個(gè)用戶數(shù)據(jù)的操作。如下圖:
4.模擬誤操作刪除user_info表
5.恢復(fù)操作
執(zhí)行恢復(fù)操作時(shí),需要先恢復(fù)完全備份,然后恢復(fù)增量備份。
二、基于位置恢復(fù)
1.由于上面已經(jīng)做過恢復(fù)操作了,所以我們***步還是模擬誤操作刪除user_info表,然后恢復(fù)完全備份。操作同上,這里就略過了。
2.想要實(shí)現(xiàn)基于位置或時(shí)間點(diǎn)恢復(fù)數(shù)據(jù),必須先通過查看二進(jìn)制日志文件確定恢復(fù)的位置或時(shí)間點(diǎn)。使用"mysqlbinlog --no-defaults 二進(jìn)制日志文件"可以查看日志文件的具體內(nèi)容。如下圖:
通過查看日志文件的具體內(nèi)容可以發(fā)現(xiàn),在每進(jìn)行一個(gè)操作之前都會(huì)有一個(gè)獨(dú)特的編號(hào),如"# at 458"。此編號(hào)隨著操作數(shù)增多而變大,我們稱之為操作ID。在操作ID下面緊跟著的是時(shí)間標(biāo)記,要實(shí)現(xiàn)基于位置或時(shí)間點(diǎn)恢復(fù)數(shù)據(jù),需要分別依賴二進(jìn)制日志文件中的操作ID或者時(shí)間標(biāo)記。例如,通過二進(jìn)制日志文件可以得知,在操作ID為"458"的時(shí)候,user_info表中插入了"王麻子"的用戶數(shù)據(jù)。因此執(zhí)行以下命令可以實(shí)現(xiàn)僅恢復(fù)到操作ID為"458"之前的數(shù)據(jù),即不恢復(fù)"王麻子"的信息。這時(shí)所恢復(fù)的數(shù)據(jù)是從二進(jìn)制日志文件的開始位置直到指定位置。如下圖:
上述操作命令中,"--stop-position"指定的是停止的位置,如果僅恢復(fù)"王麻子"的信息,跳過"趙六"的信息,可以使用"--start-position"選項(xiàng)指定開始恢復(fù)數(shù)據(jù)的位置。這時(shí)所恢復(fù)的數(shù)據(jù)是從指定位置開始直到二進(jìn)制日志文件的***。如下圖:
三、基于時(shí)間點(diǎn)恢復(fù)
基于時(shí)間點(diǎn)恢復(fù)數(shù)據(jù)所使用的選項(xiàng)是"--stop-datetime",指定的時(shí)間同樣也是查詢二進(jìn)制日志文件所得。
如下圖:執(zhí)行以下操作可以實(shí)現(xiàn)恢復(fù)到"2:38:32"之前的數(shù)據(jù),即不恢復(fù)"王麻子"的信息。
基于時(shí)間點(diǎn)恢復(fù)同樣也可以使用"--start-datetime"選項(xiàng)指定開始恢復(fù)數(shù)據(jù)的時(shí)間,命令格式與基于位置恢復(fù)的格式一樣,這里就不再給圖了。
四、制定企業(yè)備份策略的思路
在企業(yè)中備份策略并不是千篇一律的,而是根據(jù)每個(gè)企業(yè)的實(shí)際生產(chǎn)環(huán)境與業(yè)務(wù)需求指定合適的備份策略。無論是選擇完全備份,還是選擇增量備份,都需要考慮它們的優(yōu)缺點(diǎn),是否適合當(dāng)前的環(huán)境。同時(shí),為了保證恢復(fù)的完整性,建議開啟二進(jìn)制日志功能,二進(jìn)制日志文件給恢復(fù)工作也帶來了很大的靈活性,可以基于時(shí)間點(diǎn)或位置進(jìn)行恢復(fù)。考慮到數(shù)據(jù)庫性能,我們可以將二進(jìn)制日志文件保存到其他安全的硬盤中。
在進(jìn)行熱備份時(shí),備份操作和應(yīng)用服務(wù)在同時(shí)運(yùn)行,這樣就十分消耗系統(tǒng)資源了,導(dǎo)致數(shù)據(jù)庫服務(wù)性能下降,這就要求我們選擇合適的時(shí)間,如,在應(yīng)用負(fù)擔(dān)很小的時(shí)候在進(jìn)行備份操作。
需要注意的是,不是備份完就萬事大吉了,***確認(rèn)備份是否可用,所以,備份之后的恢復(fù)測(cè)試是很有必要的,同時(shí)備份時(shí)間也要有靈活調(diào)整。如:
- 數(shù)據(jù)更新頻繁,則應(yīng)該頻繁的備份
- 數(shù)據(jù)的重要性,在有適當(dāng)更新時(shí)進(jìn)行備份
- 在數(shù)據(jù)庫壓力小的時(shí)間段進(jìn)行備份,如一周一次完全備份,每天進(jìn)行增量備份。
- 中小公司,完全備份一般一天一次即可
- 大公司可每周進(jìn)行一次完全備份,每天進(jìn)行增量備份
- 盡量為企業(yè)實(shí)現(xiàn)主從復(fù)制架構(gòu),以增加數(shù)據(jù)的高可用性