您好,登錄后才能下訂單哦!
本篇文章為大家展示了備份恢復MySQL的方法,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
背景
首先交代一下背景,由于某些因素的限制,我們公司目前的備份策略采用的是隔天全備的方案,增量備份則使用的是binlog server的方式,那么如何快速恢復就成為了我們需要思考的問題
恢復需求
根據(jù)我以往的一些經(jīng)驗來說,通常需要從備份恢復數(shù)據(jù)的場景有如下幾種:
1.被誤刪庫了
2.被誤刪表了,類型為TRUNCATE或者DROP
3.被誤刪列了,類型為ALTER ... DROP COLUMN
4.被誤刪數(shù)據(jù)了,類型為DELETE或者UPDATE或者REPLACE
5.表空間損壞或出現(xiàn)壞塊了
根據(jù)場景來說,我們可以大致分為兩類:
對于第二類的恢復需求一般來說都比較容易處理,可以利用binlog回滾工具,例如業(yè)界比較著名的有binlog2sql以及MyFlash等,這里暫不贅述,我們重點來討論第一類需求。
為了達到快速恢復的目的,業(yè)界DBA經(jīng)常會采用的方式就是部署一個延遲從庫來解決,我們公司目前 所有的核心DB都部署了延遲從庫。但是即便有了延遲從庫,假設(shè)我們錯過了延遲的時間,或者在后續(xù)利用延遲從庫恢復的時候指定錯了位點,導致了誤刪DDL同樣應用到了從庫,這個時候我們就沒有辦法利用延遲從庫這根救命稻草了。
全備恢復(異機恢復)
此時,我們只能通過備份來進行數(shù)據(jù)恢復了。首先我們需要恢復全備,通常來說就是xtrabackup備份的物理備份了。假設(shè)你的備份在遠程的機器上,那么你可能需要做如下幾步動作來進行全備恢復:
增備恢復
到這里,全備已經(jīng)恢復完成了,接下來需要做的就是增量恢復了。按照我們之前的備份方案,我們需要通過binlog來完成增量數(shù)據(jù)的恢復。對于binlog恢復,我們通常需要以下幾個步驟
binlog恢復的方式有很多種,你可以用的是原先master上的binlog,也可以用binlogserver上的binlog,需要做的就是找到binlog恢復的終點即可。
增備恢復優(yōu)化
到這里,你可能會覺得,利用binlog恢復有點麻煩。確實是這樣的,利用mysqlbinlog命令并沒有辦法指定恢復到哪個GTID,只能通過解析binlog,找到需要恢復到的GTID對應的pos位點才行,這對于自動化來說實現(xiàn)起來會比較麻煩。另外,如果利用mysqlbinlog命令恢復,屬于單線程恢復,假設(shè)需要恢復的binlog量比較多的話,那么這個增量恢復的時間可想而知。
那么有什么辦法能加速binlog應用呢?這里我們就想到了MySQL5.7的并行復制,如果我們能用到sql thread的并行復制,是不是這個問題就解決了呢?
master上binlog恢復
我們回到全備恢復的位點,我們將新實例作為原先的master的slave,然后恢復到指定的GTID位置就可以了呢?沒錯,這是一種非常簡便又輕松還不容易出錯的方式,并且還可以利用并行復制的原理來加速binlog應用的目的。但是這種方式的一個要求就是原先的master最老的binlog包含了我們需要的起始恢復位點,這個很容易想到,所以,這將成為我們首選的恢復方式。
binlogserver上binlog恢復
假設(shè)原先master上的binlog已經(jīng)被purge了,那么我們那需要從binlog上去恢復。有人可能會想到將binlogserver上的binlog拷貝到原先的master上,然后通過修改binlog index來達到注冊的目的,實際上這并不可取,具體原因可以見《手動注冊binlog文件造成主從異?!贰?/p>
我們可以采取的方式是什么呢?就是利用binlogserver做成偽裝master,然后將從庫change上去,其思想就是欺騙slave,讓slave的io_thread將缺失的binlog拉取過來,sql_thread并行應用binlog event(我們將在下一節(jié)具體演示這種方式)。
優(yōu)化后的恢復流程
經(jīng)過優(yōu)化以后,我們的增備恢復流程就變成了,首先通過master上的binlog進行恢復,如果發(fā)現(xiàn)master上的binlog已經(jīng)被purge了,那么通過binlogserver上的binlog進行恢復,這樣一來我認為是比較科學合理的恢復流程。
各種恢復方式時效性對比
業(yè)務恢復
到這里,我們已經(jīng)完成了全量+增量的備份數(shù)據(jù)恢復,這個時候需要同研發(fā)確認數(shù)據(jù),確認完成以后將對應的表恢復到原先的master,通常采用的方式有:
總結(jié)
本節(jié)主要介紹了備份恢復的設(shè)計流程,在我們沒有辦法優(yōu)化全備恢復的情況下,我們通過優(yōu)化增量備份方式和流程達到縮短恢復時間的目的。并且需要說明的一點是,本節(jié)介紹的目前我還沒有完全測試,不保證每個點都是正確的,還需要進一步驗證,驗證通過以后我也會通知大家,并且結(jié)合到現(xiàn)有的數(shù)據(jù)庫運維平臺,做到自動化恢復
最后還是提醒幾點:
上述內(nèi)容就是備份恢復MySQL的方法,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。