5、MySQL热备份及恢复
與冷備份正好相反,熱備份是在數(shù)據(jù)庫處于運(yùn)行狀態(tài)時(shí)直接備份,不影響現(xiàn)有業(yè)務(wù)的正常進(jìn)行。熱備份又細(xì)分為邏輯備份和裸文件備份,下面我們介紹邏輯備份和冷備份以及它們常用的備份和恢復(fù)的方法。
邏輯備份
邏輯備份的最大優(yōu)點(diǎn)就是對于各種存儲(chǔ)引擎,都可以用同樣的方法來備份。而冷備份則不同,不同的存儲(chǔ)引擎的備份方法也各不相同。因此,對于不同存儲(chǔ)引擎混合的數(shù)據(jù)庫,用邏輯備份會(huì)更簡單一些。
邏輯備份可以說是最簡單,也是目前中小型系統(tǒng)最常用的備份方法。邏輯備份主要有以下幾種方法:
1)mysqldump
mysqldump 是 MySQL 自帶的邏輯備份工具。它的備份原理是通過協(xié)議連接到 MySQL 數(shù)據(jù)庫,將需要備份的數(shù)據(jù)查詢出來,然后將查詢出的數(shù)據(jù)轉(zhuǎn)換成對應(yīng)的 INSERT 語句。當(dāng)我們需要還原恢復(fù)這些數(shù)據(jù)時(shí),只要執(zhí)行這些 INSERT 語句,就能將對應(yīng)的數(shù)據(jù)還原。所以有的資料也將這種備份方式稱為 INSERT 備份。
恢復(fù)數(shù)據(jù)時(shí)可以使用 mysql -uroot -p <backup.sql 直接調(diào)用備份文件執(zhí)行所有命令,將數(shù)據(jù)完全恢復(fù)到備份時(shí)候的狀態(tài)。如果已經(jīng)連接上了 MySQL 服務(wù)器,那么可以通過 source /path/backup.sql 來進(jìn)行恢復(fù)。
我們在《MySQL mysqldump備份數(shù)據(jù)庫》和《MySQL恢復(fù)數(shù)據(jù)庫》中詳細(xì)介紹了上面所講的備份和恢復(fù)數(shù)據(jù)的方法。
2)SELECT INTO…OUTFILE
SELECT INTO…OUTFILE 語句可以把表數(shù)據(jù)導(dǎo)出到一個(gè)文本文件中,且能將數(shù)據(jù)庫中的表數(shù)據(jù)以特定分隔符進(jìn)行分隔后記錄在文本文件中,以達(dá)到邏輯備份的效果。
這種備份方式與 mysqldump 方法相比,使用的存儲(chǔ)空間更小,數(shù)據(jù)格式更加清晰明確,編輯方便。但是這種方法只能導(dǎo)出或?qū)霐?shù)據(jù)的內(nèi)容,不包括表的結(jié)構(gòu),如果表的結(jié)構(gòu)文件損壞,則必須先恢復(fù)原來的表的結(jié)構(gòu)。而且這種方法不能在同一個(gè)備份文件中存在多個(gè)表的備份數(shù)據(jù),增加了文件維護(hù)和恢復(fù)的成本。
這種備份方法恢復(fù)起來會(huì)稍微麻煩一點(diǎn),需要一個(gè)表一個(gè)表通過相關(guān)命令來進(jìn)行恢復(fù)。當(dāng)然如果是通過腳本來實(shí)現(xiàn)自動(dòng)多表恢復(fù)也是比較方便的。恢復(fù)方法有 2 個(gè),一個(gè)是通過 MySQL 的 LOAD DATA INFILE 命令來恢復(fù)數(shù)據(jù),另一種方法就是通過 MySQL 提供的使用工具 mysqlimport 來進(jìn)行恢復(fù)。
我們在《MySQL導(dǎo)出表數(shù)據(jù)》和《MySQL數(shù)據(jù)庫恢復(fù)(LOAD DATA)》中詳細(xì)介紹了上面所講的備份和恢復(fù)數(shù)據(jù)的方法。
3)mydumper
mydumper 是針對 MySQL 數(shù)據(jù)庫備份的一個(gè)輕量級第三方的開源工具,備份方式為邏輯備份。它支持多線程,備份速度遠(yuǎn)高于原生態(tài)的 mysqldump 以及其它眾多優(yōu)異特性。與其配套的相應(yīng)恢復(fù)數(shù)據(jù)為 myloader 工具。DBA 稱 mydumper 和 myloader 為備份界的“小鋼炮”。
我們可以看出所謂的邏輯備份就是備份 SQL 語句,然后恢復(fù)數(shù)據(jù)時(shí)執(zhí)行備份 SQL,從而實(shí)現(xiàn)數(shù)據(jù)庫數(shù)據(jù)的重現(xiàn)。邏輯備份完成后所形成的文件都可以直接編輯。
邏輯備份的作用如下:
- 通過邏輯備份,我們可以僅僅恢復(fù)備份中的部分?jǐn)?shù)據(jù)而不需要全部恢復(fù)。不會(huì)影響不相關(guān)的數(shù)據(jù);
- 通過全庫的邏輯備份,我們可以在新的 MySQL 環(huán)境下完全重建出一個(gè)與備份時(shí)完全一樣的數(shù)據(jù)庫,并且不受平臺類型限制;
- 通過特定條件的邏輯備份,我們可以將某些特定數(shù)據(jù)輕松遷移(或者同步)到其它的 MySQL 或另外的數(shù)據(jù)庫環(huán)境。
裸文件備份
裸文件備份主要在底層復(fù)制數(shù)據(jù)文件,所以備份速度要比邏輯備份更快。
我們利用 Percona 公司發(fā)布的一個(gè) XtraBackup 熱備份工具來完成裸文件備份,它是 Percona 公司的開源項(xiàng)目,據(jù)官方介紹它是世界上唯一 一款開源的能夠?qū)?InnoDB 和 XtraDB 數(shù)據(jù)庫進(jìn)行熱備的工具。
它的優(yōu)點(diǎn)就是備份與恢復(fù)過程的速度很快,安全可靠,而且在備份過程中不會(huì)縮表,不影響現(xiàn)有業(yè)務(wù)。但它目前還是不能對表結(jié)構(gòu)文件和其它非事務(wù)類型的表進(jìn)行備份。
總結(jié)
以上是生活随笔為你收集整理的5、MySQL热备份及恢复的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2、MySQL备份类型
- 下一篇: 6、mysqldump备份数据库(附带实