公司有一套mysqlAB復(fù)制架構(gòu)的生產(chǎn)庫(kù),一主一從的架構(gòu), 每周一凌晨0天都自動(dòng)做全備。
一切正常,但今天(假設(shè)為周6)不小心誤刪除了一張表,從庫(kù)也會(huì)跟著做誤刪除。假設(shè)這張表里有好幾年的業(yè)務(wù)數(shù)據(jù), 如何恢復(fù)呢?
有以下幾種思路:
需要把這幾年內(nèi)所有的二進(jìn)制日志先合并,再通過(guò)sed,grep,awk等命令處理把這張表從建表到現(xiàn)在的所有操 作按順序找出來(lái)(當(dāng)然要除掉你最后誤刪除的那條),然后導(dǎo)回去(數(shù)據(jù)量太大就不建議了)
先恢復(fù)周一的全備到測(cè)試庫(kù)上,然后再恢復(fù)全備到現(xiàn)在的二進(jìn)制日志(除了誤刪除的那句),再把那張表導(dǎo)出 來(lái),導(dǎo)回到生產(chǎn)庫(kù)上
有延時(shí)復(fù)制的話,在延時(shí)庫(kù)上導(dǎo)出這張表,導(dǎo)回A, 再用二進(jìn)制日志恢復(fù)延時(shí)時(shí)間內(nèi)的誤刪表的操作(除了誤刪除的那句)
從上面的分析來(lái)看,延時(shí)復(fù)制能夠在一定程序上簡(jiǎn)化恢復(fù)的過(guò)程。
Maatkit是一個(gè)Perl寫的Mysql開(kāi)源管理工具包,里面有一個(gè)可以在www.maatkit.org網(wǎng)站上下載軟件包。我這里軟包為
mk-slave-delay
maatkit-7540.tar.gz
命令可以實(shí)現(xiàn)延時(shí)復(fù)制。
搭建過(guò)程
首先需要搭建好mysqlAB復(fù)制(傳統(tǒng)AB復(fù)制,基于GTIDs的AB復(fù)制,半同步復(fù)制等都可以),然后做以下過(guò)程
1, 在需要做延時(shí)復(fù)制的slave上安裝mattkit
(注意: master和正常的slave不用安裝)
2, 確認(rèn)整個(gè)架構(gòu)所有機(jī)器時(shí)間同步
因?yàn)檠訒r(shí)是要按時(shí)間來(lái)計(jì)算的,所以時(shí)間必須要一致, 所有服務(wù)器執(zhí)行下面的命令,并比較時(shí)間
3, 運(yùn)行延時(shí)復(fù)制進(jìn)程
確認(rèn)時(shí)間一致, 并且AB復(fù)制正常的情況下, 在slave上執(zhí)行下面的命令
4, 測(cè)試
在slave上查看復(fù)制狀態(tài),會(huì)發(fā)現(xiàn)SQL線程為NO,這是正常的,因?yàn)檠訒r(shí)復(fù)制里IO線程是實(shí)時(shí)的,只是把SQL線程延時(shí)了
然后在master上找一個(gè)測(cè)試表插入幾條數(shù)據(jù),等待1分鐘后,才會(huì)看到數(shù)據(jù)在salve上復(fù)制成功。
-
MySQL
+關(guān)注
關(guān)注
1文章
821瀏覽量
26652 -
線程
+關(guān)注
關(guān)注
0文章
505瀏覽量
19715
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論