8.1 備份與恢復(fù)概述
可以根據(jù)不同的類烈來劃分備份的方法给僵。 根據(jù)備份的方法不同可以將備份分為:
Hot Backup (熱備)
Cold Backup (冷備)
Warm Backup (溫備)
????????Hot Backup 是指數(shù)據(jù)庫(kù)運(yùn)行中直接備份嚼贡, 對(duì)正在運(yùn)行的數(shù)據(jù)庫(kù)操作沒有任何的影響女阀。 這種方式在 MySQL 官方手冊(cè)中稱為 Online Backup (在線備份)脓斩。 Cold Backup 是指 備份操作是在數(shù)據(jù)庫(kù)停止的情況下赤屋, 這種備份最為簡(jiǎn)單碍岔, 一般只需要復(fù)制相關(guān)的數(shù)據(jù)庫(kù)物理文件即可畏线。 這種方式在 MySQL 官方手冊(cè)中稱為 Offline Backup (離線備份)味榛。 Warm Backup 備份同樣是在數(shù)據(jù)庫(kù)運(yùn)行中進(jìn)行的椭坚, 但是會(huì)對(duì)當(dāng)前數(shù)據(jù)庫(kù)的操作有所影響, 如加 一個(gè)全局讀鎖以保證備份數(shù)據(jù)的一致性搏色。
按照備份后文件的內(nèi)容善茎, 備份又可以分為:
邏輯備份
裸文件備份
????????在 MySQL 數(shù)據(jù)庫(kù)中, 邏輯備份是指?jìng)浞莩龅奈募?nèi)容是可讀的频轿,一般是文本文件垂涯。內(nèi)容一般是由一條條SQL語(yǔ)句, 或者是表內(nèi)實(shí)際數(shù)據(jù)組成航邢。如mysqldump和SELECT*INTO OUTFILE 的方法耕赘。這類方法的好處是可以觀察導(dǎo)出文件的內(nèi)容, 一般適用于數(shù)據(jù)庫(kù)的升級(jí)膳殷、遷移等工作操骡。但其缺點(diǎn)是恢復(fù)所需要的時(shí)間往往較長(zhǎng)。
????????裸文件備份是指復(fù)制數(shù)據(jù)庫(kù)的物理文件秽之, 既可以是在數(shù)據(jù)庫(kù)運(yùn)行中的復(fù)制(如ibbackup当娱、xtrabackup這類工具), 也可以是在數(shù)據(jù)庫(kù)停止運(yùn)行時(shí)直接的數(shù)據(jù)文件復(fù)制考榨。這類備份的恢復(fù)時(shí)間往往較邏輯備份短很多跨细。若按照備份數(shù)據(jù)庫(kù)的內(nèi)容來分, 備份又可以分為:
完全備份
增量備份
日志備份
????????完全備份是指對(duì)數(shù)據(jù)庫(kù)進(jìn)行一個(gè)完整的備份河质。增抵備份是指在上次完全備份的基礎(chǔ)上冀惭, 對(duì)于更改的數(shù)據(jù)進(jìn)行備份震叙。日志備份主要是指對(duì)MySQL數(shù)據(jù)庫(kù)二進(jìn)制日志的備份,通過對(duì)一個(gè)完全備份進(jìn)行二進(jìn)制日志的重做(replay)來完成數(shù)據(jù)庫(kù)的point-in-time的恢復(fù)工作散休。MySQL數(shù)據(jù)庫(kù)復(fù)制(replication)的原理就是異步實(shí)時(shí)地將二進(jìn)制日志重做傳送并應(yīng)用到從(slave/standby)數(shù)據(jù)庫(kù)媒楼。
8.2 冷備
? ? ? ? 對(duì)于InnoDB存儲(chǔ)引擎的冷備非常簡(jiǎn)單,只需要備份MySQL數(shù)據(jù)庫(kù)的frm文件戚丸,共享表空間文件划址,獨(dú)立表空間文件(*.ibd), 重做日志文件。另外建議定期備份MySQL數(shù)據(jù)庫(kù)的配置文件my.cnf, 這樣有利于恢復(fù)的操作限府。
冷備的優(yōu)點(diǎn)是:
備份簡(jiǎn)單夺颤,只要復(fù)制相關(guān)文件即可。
備份文件易于在不同操作系統(tǒng)胁勺,不同MySQL版本上進(jìn)行恢復(fù)世澜。?
恢復(fù)相當(dāng)簡(jiǎn)單,只需要把文件恢復(fù)到指定位囂即可署穗。
恢復(fù)速度快寥裂,不需要執(zhí)行任何SQL語(yǔ)句,也不需要重建索引案疲。
冷備的缺點(diǎn)是:
InnoDB存儲(chǔ)引擎冷備的文件通常比邏輯文件大很多封恰,因?yàn)楸砜臻g中存放著很多其他的數(shù)據(jù),如undo段络拌,插入緩沖等信息俭驮。
冷備也不總是可以輕易地跨平臺(tái)回溺。操作系統(tǒng)春贸、MySQL的版本、文件大小寫敏感和浮點(diǎn)數(shù)格式都會(huì)成為問題遗遵。
8.3 邏輯備份
8.3.1 mysqldump
8.3.2 SELECT…INTO OUTFILE
????????SELECT. .. INTO 語(yǔ)句也是一種邏輯備份的方法萍恕, 更準(zhǔn)確地說是導(dǎo)出一張表中的數(shù)據(jù)。
8.3.3 邏輯備份的恢復(fù)
? ??????mysqldump的恢復(fù)操作比較簡(jiǎn)單车要, 因?yàn)閭浞莸奈募褪菍?dǎo)出的SQL語(yǔ)句允粤,一般只需要執(zhí)行這個(gè)文件就可以了
? ??????因?yàn)檫壿媯浞莸奈募怯蒘QL語(yǔ)句組成的, 也可以通過SOURCE命令來執(zhí)行導(dǎo)出 的邏輯備份文件翼岁。
8.4 二進(jìn)制日志備份與恢復(fù)
? ??????二進(jìn)制日志非常關(guān)鍵类垫, 用戶可以通過它完成 point-in-time 的恢復(fù)工作。 MySQL 數(shù)據(jù)庫(kù)的 replication 同樣需要二進(jìn)制日志琅坡。 在默認(rèn)情況下并不啟用二進(jìn)制日志悉患, 要使用二進(jìn)制日志首先必須啟用它。
8.5 熱備
8.5.1 ibbackup
? ??????ibbackup 是 lnnoDB 存儲(chǔ)引擎官方提供的熱備工具榆俺, 可以同時(shí)備份 MylSAM 存儲(chǔ)引擎和 InnoDB 存儲(chǔ)引擎表售躁。對(duì)于 InnoDB 存儲(chǔ)引擎表其備份工作原理如下:
1) 記錄備份開始時(shí)坞淮, InnoDB 存儲(chǔ)引擎重做日志文件檢查點(diǎn)的 LSN。
2) 復(fù)制共享表空間文件以及獨(dú)立表空間文件陪捷。
3) 記錄復(fù)制完表空間文件后回窘, lnnoDB 存儲(chǔ)引擎重做日志文件檢查點(diǎn)的 LSN。
4) 復(fù)制在備份時(shí)產(chǎn)生的重做日志市袖。
8.6 快照備份? ? ? ??
????????MySQL數(shù)據(jù)庫(kù)本身并不支持快照功能啡直,因此快照備份是指通過文件系統(tǒng)支持的快照功能對(duì)數(shù)據(jù)庫(kù)進(jìn)行備份拜英。備份的前提是將所有數(shù)據(jù)庫(kù)文件放在同一文件分區(qū)中丢胚, 然后對(duì)該分區(qū)進(jìn)行快照操作聪建。支持快照功能的文件系統(tǒng)和設(shè)備包括FreeBSD的UFS文件系統(tǒng)蛮拔,Solaris的ZFS文件系統(tǒng)吃粒,GNU/Linux的邏輯管理器(LogicalVolume Manager, LVM)等坪稽。這里以LVM為例進(jìn)行介紹匿刮,UFS和ZFS的快照實(shí)現(xiàn)大致和LVM相似县忌。
8.7 復(fù)制
8.7.1 復(fù)制的工作原理
? ??????復(fù)制 C replication) 是 MySQL 數(shù)據(jù)庫(kù)提供的一種高可用高性能的解決方案掂榔,一般用來建立大型的應(yīng)用。 總體來說症杏, replication 的工作原理分為以下 3 個(gè)步驟:
1) 主服務(wù)器 (master) 把數(shù)據(jù)更改記錄到二進(jìn)制日志 (binlog) 中装获。
2) 從服務(wù)器 (slave) 把主服務(wù)器的二進(jìn)制日志復(fù)制到自己的中繼日志 (relay log) 中。
3) 從服務(wù)器重做中繼日志中的日志厉颤, 把更改應(yīng)用到自己的數(shù)據(jù)庫(kù)上穴豫, 以達(dá)到數(shù)據(jù)的最終一致性。
? ??????復(fù)制的工作原理并不復(fù)雜逼友,其實(shí)就是一個(gè)完全備份加上二進(jìn)制日志備份的還原精肃。不同的是這個(gè)二進(jìn)制日志的還原操作基本上實(shí)時(shí)在進(jìn)行中。這里特別需要注意的是帜乞,復(fù)制不是完全實(shí)時(shí)地進(jìn)行同步司抱,而是異步實(shí)時(shí)。這中間存在主從服務(wù)器之間的執(zhí)行延時(shí)黎烈,如果主服務(wù)器的壓力很大习柠,則可能導(dǎo)致主從服務(wù)器延時(shí)較大。復(fù)制的工作原理如圖8-4所示照棋。
8.7.2 快照+復(fù)制的備份架構(gòu)
? ??????復(fù)制可以用來作為備份资溃, 但功能不僅限于備份, 其主要功能如下:
????????數(shù)據(jù)分布烈炭。 由于 MySQL 數(shù)據(jù)庫(kù)提供的復(fù)制并不需要很大的帶寬要求溶锭, 因此可以在不同的數(shù)據(jù)中心之間實(shí)現(xiàn)數(shù)據(jù)的復(fù)制。
????????讀取的負(fù)載平衡梳庆。通過建立多個(gè)從服務(wù)器暖途,可將讀取平均地分布到這些服務(wù)器中卑惜,并且減少了主服務(wù)器的壓力。一般通過DNS的Round-Robin和Linux的LVS功能都可以實(shí)現(xiàn)負(fù)載平衡驻售。
????????數(shù)據(jù)庫(kù)備份露久。復(fù)制對(duì)備份很有幫助,但是從服務(wù)器不是備份欺栗,不能完全代替?zhèn)浞荨?
????????高可用性和故障轉(zhuǎn)移毫痕。通過復(fù)制建立的從服務(wù)器有助于故障轉(zhuǎn)移,減少故障的停機(jī)時(shí)間和恢復(fù)時(shí)間迟几。