目錄
- 1、rsync、cp拷貝文件
- 2、select xxx into outfile語(yǔ)法
- 3、延時(shí)從庫(kù)
- 4、邏輯備份mysqldump
- 5、xtrabackup備份
- 6、binlog備份
- 7、clone plugin
從事DBA的行業(yè)也有兩年多了,在數(shù)據(jù)備份上無(wú)論是理論和實(shí)踐上,都積累了一些經(jīng)驗(yàn),恰逢這兩天又出現(xiàn)一些數(shù)據(jù)備份方面的問(wèn)題,這里,我將之前遇到過(guò)的數(shù)據(jù)備份方法簡(jiǎn)單做個(gè)整理。
我們都知道,保障數(shù)據(jù)庫(kù)的穩(wěn)定、安全、高效運(yùn)行,是DBA的工作職責(zé)所在。對(duì)于DBA來(lái)講,要想實(shí)現(xiàn)數(shù)據(jù)安全,數(shù)據(jù)備份可能是至關(guān)重要的一個(gè)環(huán)節(jié)。
我曾經(jīng)就遇到過(guò)一個(gè)案例,業(yè)務(wù)方誤刪數(shù)據(jù)引發(fā)故障,要求DBA恢復(fù)數(shù)據(jù),結(jié)果發(fā)現(xiàn)當(dāng)天的數(shù)據(jù)沒(méi)有備份,場(chǎng)面一度十分尷尬,本來(lái)這個(gè)故障是業(yè)務(wù)引發(fā)的,但是由于沒(méi)有數(shù)據(jù)備份,最后業(yè)務(wù)和DBA各打五十大板,一起背鍋。如果業(yè)務(wù)沒(méi)有要求DBA恢復(fù)數(shù)據(jù),那么DBA完全可以后續(xù)悄悄的將數(shù)據(jù)備份,最后就可以免于被牽連,當(dāng)然,生產(chǎn)環(huán)境沒(méi)有如果。
備份的重要性,自然不言而喻,那么我們常見(jiàn)的備份思路,都可以有哪些呢?根據(jù)備份是否影響線(xiàn)上環(huán)境,大體可以分為冷備、熱備2種方法,其中冷備可以理解是對(duì)線(xiàn)上業(yè)務(wù)有影響,需要離線(xiàn)備份,而熱備是對(duì)線(xiàn)上業(yè)務(wù)沒(méi)有影響或者影響比較小。
我自己總結(jié)了以下方法:
1、rsync、cp拷貝文件
這種方法比較暴力,就是直接停止MySQL數(shù)據(jù)庫(kù),然后通過(guò)cp、rsync這種Linux物理文件復(fù)制命令,來(lái)實(shí)現(xiàn)數(shù)據(jù)的備份。
其中:
cp特指的是備份到當(dāng)前服務(wù)器的其他目錄
rsync特指的是備份到其他服務(wù)器上
這種方法,要注意下面幾點(diǎn):
a、那對(duì)于線(xiàn)上環(huán)境來(lái)講,rsync的方法會(huì)更好,因?yàn)槿绻?wù)器宕機(jī)了,cp方法備份也會(huì)不可用。
b、rsync和cp的方法,都需要在主從架構(gòu)的從庫(kù)上,或者是指定備份庫(kù)上進(jìn)行。(這里我推薦線(xiàn)上環(huán)境使用一主一從一備份的復(fù)制架構(gòu))
冷備份的最大的優(yōu)點(diǎn)是速度快、操作簡(jiǎn)單。
適合大數(shù)據(jù)庫(kù)的日常備份。
2、select xxx into outfile語(yǔ)法
這種方法,其實(shí)往往不能叫做備份,因?yàn)樗鋵?shí)只備份了一個(gè)表的數(shù)據(jù),但是它非常有用。
試想這樣一種場(chǎng)景,業(yè)務(wù)方讓你update幾百條數(shù)據(jù),而表中的數(shù)據(jù)有上千萬(wàn)條,這個(gè)時(shí)候,如果備份全表,就顯得不那么靈活,而且耗費(fèi)的時(shí)間較長(zhǎng)。如果我們使用select的語(yǔ)法,將這些需要修改的數(shù)據(jù),先保存到一個(gè)txt的文件中,即使update之后,業(yè)務(wù)反饋和預(yù)期不符,也能快速的找到update之前的樣子,可以極大的縮短你恢復(fù)數(shù)據(jù)的時(shí)間。
這種備份方法適合單個(gè)表的某一部分?jǐn)?shù)據(jù)變更前的備份。
3、延時(shí)從庫(kù)
在MySQL中,這種備份方案相對(duì)比較少,在MongoDB中,延時(shí)從庫(kù)非常常見(jiàn)。但是延時(shí)從庫(kù)是一種比較好的在線(xiàn)備份手段,它最主要的特點(diǎn)是恢復(fù)的可能性高。
有些時(shí)候,你辛苦備份的數(shù)據(jù),在其他服務(wù)器上,因?yàn)楦鞣N依賴(lài)或者版本問(wèn)題,導(dǎo)致無(wú)法還原一個(gè)MySQL實(shí)例,這就比較尷尬,而延時(shí)從庫(kù)可以很好的解決這個(gè)問(wèn)題,因?yàn)楸旧韽膸?kù)是運(yùn)行中的,所以不用擔(dān)心庫(kù)起不來(lái)的情況。
延時(shí)從庫(kù)的備份方案中,要控制從庫(kù)的延時(shí)時(shí)間,如果設(shè)置的過(guò)短,可能在主庫(kù)上引發(fā)問(wèn)題的SQL已經(jīng)在從庫(kù)上執(zhí)行過(guò)了,那么就起不到延時(shí)的效果,那延時(shí)從庫(kù)就失去意義了。
4、邏輯備份mysqldump
這可能是最常見(jiàn)的一種MySQL備份方式了,mysqldump這個(gè)官方提供的備份工具,可以提供給你某個(gè)時(shí)間點(diǎn)的一致性快照,可以很清楚的知道當(dāng)前的時(shí)間點(diǎn),MySQL數(shù)據(jù)庫(kù)執(zhí)行到了那個(gè)binlog的位點(diǎn),恢復(fù)的精確性很高。而且,它支持指定庫(kù)表備份等,功能非常強(qiáng)大。
它適合數(shù)據(jù)量在50G以下的數(shù)據(jù)庫(kù)備份,超過(guò)50G,恢復(fù)的時(shí)候會(huì)特別慢。
這個(gè)不必多說(shuō),大家都知道。
記得加--single-transaction,要不然可能會(huì)出現(xiàn)鎖表,業(yè)務(wù)無(wú)法寫(xiě)入的問(wèn)題,曾經(jīng)有個(gè)小兄弟在這里栽倒了。
它的特點(diǎn)是能夠給你某個(gè)時(shí)間點(diǎn)的數(shù)據(jù)庫(kù)快照,而且備份文件總體比較小。
5、xtrabackup備份
這是另外一種熱備份的方式,xtrabackup備份方式可以在不影響數(shù)據(jù)庫(kù)寫(xiě)入的情況下對(duì)數(shù)據(jù)庫(kù)進(jìn)行熱備,本質(zhì)其實(shí)還是物理文件拷貝,比mysqldump的速度要快。
如果主庫(kù)讀寫(xiě)壓力比較小,則可以在主庫(kù)上直接備份。不過(guò)還是建議不要在主庫(kù)上使用,因?yàn)樵?jīng)出現(xiàn)過(guò)線(xiàn)上主庫(kù)寫(xiě)入壓力比較大,xtrabackup直接把主庫(kù)備份宕機(jī)的情況出現(xiàn),從庫(kù)上不停庫(kù)進(jìn)行xtrabackup才是相對(duì)比較安全的方法。
它的特點(diǎn)是備份速度快,備份對(duì)線(xiàn)上影響比較小。
6、binlog備份
binlog備份本質(zhì)上還是SQL語(yǔ)句的備份,類(lèi)似mysqldump的結(jié)果,不過(guò)binlog中保留的數(shù)據(jù)比mysqldump保留的數(shù)據(jù)多一些。
如果你擁有這個(gè)數(shù)據(jù)庫(kù)從啟動(dòng)開(kāi)始所有的binlog,毋庸置疑,你可以將這個(gè)數(shù)據(jù)庫(kù)還原出來(lái)。但是所有的binlog必定是一個(gè)比較比較大的數(shù)據(jù)量,一般很難保留全量日志,所以binlog備份一般情況下需要搭配快照備份。
我們可以在一個(gè)從庫(kù)上線(xiàn)停掉復(fù)制關(guān)系,然后flush log新生成一個(gè)binlog,記錄為binlog0,然后將這個(gè)從庫(kù)完整的備份拷貝一份,之后保存binlog0往后的所有binlog,這樣就能利用從庫(kù)的完整備份+binlog的方法來(lái)恢復(fù)從庫(kù)的數(shù)據(jù)。
binlog備份適用于那些binlog寫(xiě)入速度一般的數(shù)據(jù)庫(kù),如果你的數(shù)據(jù)庫(kù)binlog刷新的速度很快,那數(shù)據(jù)容量可能會(huì)成為瓶頸。
7、clone plugin
clone plugin是8.0的一個(gè)亮點(diǎn)功能,既可以支持?jǐn)?shù)據(jù)備份到本地,也可以支持快速遠(yuǎn)程拉起一個(gè)數(shù)據(jù)庫(kù)的從庫(kù),是一個(gè)值得研究的備份方法。之前的文章中也有詳細(xì)些過(guò),有興趣可以去看。也可以參考官方文檔。
但是目前,線(xiàn)上環(huán)境使用的比較少,原因是大部分國(guó)產(chǎn)數(shù)據(jù)庫(kù)目前都停留在MySQL5.7版本,當(dāng)然,8.0是趨勢(shì),沒(méi)升級(jí)的趕快升級(jí)吧。
以上就是MySQL數(shù)據(jù)備份方法該如何選擇的詳細(xì)內(nèi)容,更多關(guān)于MySQL 數(shù)據(jù)備份的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
您可能感興趣的文章:- MySQL數(shù)據(jù)庫(kù)備份過(guò)程的注意事項(xiàng)
- shell腳本定時(shí)備份MySQL數(shù)據(jù)庫(kù)數(shù)據(jù)并保留指定時(shí)間
- Mysql數(shù)據(jù)庫(kù)定時(shí)備份腳本分享
- CentOS Mysql數(shù)據(jù)庫(kù)如何實(shí)現(xiàn)定時(shí)備份
- MySQL數(shù)據(jù)庫(kù)備份恢復(fù)實(shí)現(xiàn)代碼
- MySQL數(shù)據(jù)庫(kù)入門(mén)之備份數(shù)據(jù)庫(kù)操作詳解
- mysql數(shù)據(jù)備份與恢復(fù)實(shí)現(xiàn)方法分析
- MySQL定時(shí)備份數(shù)據(jù)庫(kù)操作示例
- mysql 數(shù)據(jù)庫(kù)備份的多種實(shí)現(xiàn)方式總結(jié)
- Linux實(shí)現(xiàn)定時(shí)備份MySQL數(shù)據(jù)庫(kù)并刪除30天前的備份文件
- linux定時(shí)備份MySQL數(shù)據(jù)庫(kù)并刪除以前的備份文件(推薦)
- Mysql備份多個(gè)數(shù)據(jù)庫(kù)代碼實(shí)例