mysql怎么备份和恢复_如何优雅的备份和恢复Mysql数据库?
謝邀,個(gè)人認(rèn)為從標(biāo)題看,是個(gè)比較大而且值得數(shù)據(jù)庫(kù)從業(yè)者思考的問(wèn)題;從問(wèn)題描述看,又是一個(gè)比較淺顯的問(wèn)題。
先從問(wèn)題描述看,mysqldump 備份和恢復(fù)時(shí)往往會(huì)有各種錯(cuò)誤,如何避免?mysqldump由于是邏輯備份,默認(rèn)在備份期間會(huì)去檢查各種備份對(duì)象的合法性,所以出現(xiàn)諸如表?yè)p壞,視圖定義錯(cuò)誤等問(wèn)題,雖然可能不影響數(shù)據(jù)庫(kù)的整體運(yùn)行,但是備份會(huì)通不過(guò)。謹(jǐn)慎且推薦的做法就是挨個(gè)去根據(jù)報(bào)錯(cuò)處理,直到備份成功和一次數(shù)據(jù)恢復(fù)成功為止,粗暴一點(diǎn)的做法就是加--force強(qiáng)制忽略各種sql類型的報(bào)錯(cuò),因?yàn)閺睦碚撋蟻?lái)說(shuō)這些損壞或不合法的數(shù)據(jù)庫(kù)對(duì)象,不備份也是可以接受和理解的。從答主上萬(wàn)實(shí)例的mysqldump備份失敗情況分析來(lái)看,參考這個(gè)應(yīng)該能解決99%的mysqldump失敗
再?gòu)膹V度上來(lái)說(shuō),如何優(yōu)雅的備份和恢復(fù)mysql數(shù)據(jù)庫(kù)?
備份方式的選擇
從備份期間是否停服看,熱備還是冷備,這個(gè)我認(rèn)為當(dāng)今的現(xiàn)網(wǎng)運(yùn)行的數(shù)據(jù)庫(kù)系統(tǒng)基本不存在冷備份的場(chǎng)景了(除非是整個(gè)系統(tǒng)全部撲街,恢復(fù)數(shù)據(jù)前可能有必要copy一份數(shù)據(jù)),熱備份且能夠獲取到一致性備份點(diǎn)的熱備份是mysql備份系統(tǒng)必須具備的功能。
從備份文件的類型看,無(wú)論是邏輯備份還是物理備份,都有其優(yōu)勢(shì)和缺陷,都有其不可替代性,而往往邏輯備份的優(yōu)勢(shì)正好是物理備份的缺陷。在我看來(lái)邏輯備份最大的優(yōu)勢(shì)有兩點(diǎn)
1 數(shù)據(jù)壓縮率高(因?yàn)橥ǔG闆r下會(huì)有不少index,或者碎片空間等,這個(gè)很占物理空間,而邏輯備份出來(lái)的邏輯sql就可以很大程度地節(jié)約這塊空間),這個(gè)在海量數(shù)據(jù)庫(kù)場(chǎng)景下很重要,因?yàn)閭浞菡加玫目臻g成本,上傳成本也不容忽視
2 備份靈活,兼容性強(qiáng)。打個(gè)比方,當(dāng)一個(gè)單機(jī)數(shù)據(jù)庫(kù)想做分庫(kù)分表時(shí),數(shù)據(jù)遷移階段必然會(huì)涉及到一次類似邏輯備份,通過(guò)邏輯備份導(dǎo)入分布式數(shù)據(jù)庫(kù)環(huán)境中(因?yàn)椴豢赡芡ㄟ^(guò)傳輸物理備份文件到多個(gè)數(shù)據(jù)庫(kù)節(jié)點(diǎn))
以上2點(diǎn)也正是物理備份的劣勢(shì),而物理備份相對(duì)邏輯備份而言的優(yōu)勢(shì)也非常明顯,備份速度快+恢復(fù)速度快,這兩點(diǎn)可能在絕大部分場(chǎng)景下更重要,所以現(xiàn)在主流的備份方式應(yīng)該是物理備份,雖然邏輯備份也存在一些多線程備份的開(kāi)源工具比如mydumper,但備份速度通常還是不如物理備份。
當(dāng)然,既然要優(yōu)雅,在海量數(shù)據(jù)庫(kù)備份系統(tǒng)中,我認(rèn)為兩種備份方式都應(yīng)該支持,可以靈活設(shè)置,針對(duì)不同的備份方式再開(kāi)發(fā)不同的恢復(fù)方式。除此以外,還需要考慮
0 備份和恢復(fù)期間對(duì)IO等系統(tǒng)資源消耗情況的把控,是否可以做到限速?
1 如何靈活地設(shè)置備份策略,比如備份周期和備份時(shí)間點(diǎn)的選擇,是否可以在從庫(kù)備份,備份上傳到何處,選擇什么壓縮方式?
2 如何確認(rèn)備份是否成功,哪一步驟出了問(wèn)題,哪些步驟失敗可以重試,哪些步驟失敗不必重試?
3 如何確認(rèn)成功的備份實(shí)際可有效還原?
4 再細(xì)一些,mysql為了獲取一致性的備份點(diǎn),必然會(huì)有一個(gè)flush tables with read lock的加全局鎖的操作,如何控制該操作對(duì)運(yùn)行中的實(shí)例的可能造成的惡劣影響?
5 再細(xì)一些,這個(gè)mysql實(shí)例是否開(kāi)啟了gtid,針對(duì)不同版本的mysql是否也需要有差異化對(duì)待?針對(duì)有無(wú)gtid等場(chǎng)景,備份和恢復(fù)策略其實(shí)也是有所不同的
.................
所以說(shuō),個(gè)人看來(lái),要做到一個(gè)極致優(yōu)雅的數(shù)據(jù)庫(kù)備份和恢復(fù)系統(tǒng)其實(shí)很不容易,目前可能也只有公有云才會(huì)針對(duì)各種各樣可能出現(xiàn)的場(chǎng)景和報(bào)錯(cuò)處理,將方方面面都考慮全了。
總結(jié)
以上是生活随笔為你收集整理的mysql怎么备份和恢复_如何优雅的备份和恢复Mysql数据库?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 如何利用flash制作图片椭圆扩展?
- 下一篇: mysql explain 索引_MyS