文章目錄
- 備份
- 主從復制
- 主從復制的作用
備份
根據備份方法的不同,備份可劃分為以下幾種類型:
- 熱備(Hot Backup) : 熱備指的是在數據庫運行的時候直接備份,并且對正在運行的數據庫毫無影響,這種方法在
MySQL
官方手冊中又被稱為在線備份。 - 冷備(Cold Backup) : 冷備指的是在數據庫停止的時候進行備份,這種方法十分簡單,就是直接復制相關的數據庫物理文件,這種方法在
MySQL
官方手冊中被稱為離線備份。 - 溫備(Warm Backup) : 溫備與熱備相同有一點相同,即兩者都是在數據庫運行時進行備份,但是溫備會對數據庫當前的操作產生影響,因此需要加一個全局讀鎖(不妨礙其他事務的讀操作,但阻塞寫操作)來保證備份數據的一致性。
按照備份文件的內容,備份又可以分為:
- 邏輯備份: 邏輯備份即直接備份數據庫中的一條條SQL語句或者表內的數據,通常是可讀的文本文件。這種方法的好處是我們可以觀察導出備份文件的內容,但是由于恢復時需要重新執行這些命令和導入數據,所以恢復的時間往往較長。
- 裸文件備份: 裸文件備份即復制數據庫的物理文件,既可以在運行時進行復制,也可以在停止時進行復制,并且這類備份的恢復時間往往要比邏輯備份要快很多。
按照備份數據庫的內容,備份又可以分為:
- 完全備份 : 對數據庫進行一個完整的備份
- 增量備份 : 在上次完全備份的基礎上對后續更改的數據進行備份
- 日志備份 : 對二進制日志的備份
不僅僅只有以上方法,我們還可以通過主從復制,利用從服務器作為備份。
主從復制
主從復制是 MySQL
中提供的高可用的解決方案,步驟如下:
- 主服務器把數據更改到
二進制日志(binlog)
中; - 從服務器把主服務器的二進制日志復制到自己的
中繼日志(relay log)
中; - 從服務器重做中繼日志中的日志,把更改的內容應用到自己的數據庫中,達到數據的最終一致性。
這種復制其實就是完全備份+日志備份的還原,并且為了保證數據的一致性,二進制日志的還原操作基本實時在進行。具體工作原理如下圖所示:
可以看到,從服務器有兩個線程,一個是I/O線程,一個是SQL線程:
- I/O線程負責讀取主服務器的二進制日志,并將其保存到從服務器的中繼日志中
- SQL線程負責執行中繼日志,并執行其中的SQL語句
主從復制的作用
復制不僅僅可以用來做備份,還可以用作以下幾種功能:
- 讀取的負載均衡 : 由于主從服務器中的數據一致,所以可以將讀取平均的分布到從服務器中,減少主服務器的壓力。
- 數據分布 : 可以在不同的服務器之間實現數據的復制。
- 高可用和故障轉移 : 在主服務器發生故障的時候,可以使用從服務器進行頂替,減少故障的停機時間和恢復時間。
如果某一程序員刪庫跑路,或者我們進行了一些刪庫刪表的誤操作,此時由于主從復制的機制,這些操作也會被同步到從服務器中,導致數據庫癱瘓,那這種情況如何處理呢?
我們可以采用快照+復制的備份架構,對從服務器上數據庫所在分區做快照,當主服務器發生了誤操作時,我們只需要利用從服務器上保存的快照進行恢復,再根據二進制日志來進行某一時間點的恢復即可。