馮冬艷
(山西職業(yè)技術(shù)學(xué)院,山西 太原 030006)
近些年,隨著信息技術(shù)的快速發(fā)展,為了降低成本,提高競爭力,絕大多數(shù)企業(yè)在企業(yè)內(nèi)部應(yīng)用了各種各樣的信息系統(tǒng),并且通過數(shù)據(jù)庫對企業(yè)的大量數(shù)據(jù)進(jìn)行開發(fā)和管理。尤其是伴隨著大數(shù)據(jù)、云計(jì)算、物聯(lián)網(wǎng)、人工智能等新興技術(shù)成長起來的一些互聯(lián)網(wǎng)企業(yè),數(shù)據(jù)可以稱之為是企業(yè)的根基與命脈,如果企業(yè)的數(shù)據(jù)安全得不到保障,則直接影響到這類企業(yè)的生存和發(fā)展。多數(shù)企業(yè)采取了多種手段來保障數(shù)據(jù)的安全,比如采用磁盤陣列、數(shù)據(jù)備份、雙機(jī)容錯(cuò)、NAS、數(shù)據(jù)遷移、異地容災(zāi)等。
目前,市場上數(shù)據(jù)庫管理系統(tǒng)種類較多,常見的有Oracle、Sybase、SQL Server、DB2、MySQL,以及 MySQL的兩個(gè)重要分支MariaDB和Percona。Oracle是甲骨文公司的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),其產(chǎn)品在數(shù)據(jù)庫領(lǐng)域有著廣泛的應(yīng)用,產(chǎn)品可靠性高、使用方便、功能強(qiáng)大、可移植性好,適用于各類大中小型系統(tǒng)。Sybase是美國Sybase公司的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),是一種典型的UNIX或Windows NT平臺上C/S結(jié)構(gòu)下的大型數(shù)據(jù)庫管理系統(tǒng),目前在我國的電信行業(yè)及鐵路行業(yè)內(nèi)占有較高的市場份額,其產(chǎn)品主要適用于大型企業(yè)的數(shù)據(jù)庫管理。SQL Server是MicroSoft公司的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),其產(chǎn)品與目前主流的桌面系統(tǒng)——Windows操作系統(tǒng)兼容性好,版本豐富,可適用于不同的工作環(huán)境,簡單易用,可伸縮性好,相關(guān)軟件集成度高。DB2是IBM公司的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),具有良好的伸縮性,較好的性能和較強(qiáng)的網(wǎng)絡(luò)支持能力,主要適用于大型系統(tǒng)的數(shù)據(jù)管理。MySQL最初是由MySQL AB公司開發(fā),后被Oracle公司收購,是一款開源免費(fèi)的數(shù)據(jù)庫管理系統(tǒng)產(chǎn)品,也是目前中小型企業(yè)首選的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),具有簡單易用、體積小、速度快、總成本低等突出特點(diǎn),且支持插件式存儲引擎。而MariaDB和Percona是MySQL的兩個(gè)分支,有著與MySQL類似的特點(diǎn),也是開源免費(fèi)的,有開源社區(qū)的技術(shù)支持,經(jīng)常會(huì)有一些最新的技術(shù)在其產(chǎn)品上測試并推廣,在我國主要應(yīng)用于一些有著較強(qiáng)研發(fā)實(shí)力的企業(yè)。為此,本文探討一種基于LVM(邏輯卷)快照的對MySQL數(shù)據(jù)庫進(jìn)行完全備份的備份方式。
MySQL數(shù)據(jù)庫不同于其他數(shù)據(jù)庫產(chǎn)品的一個(gè)很大特色就是其支持插件式的存儲引擎,用戶可以根據(jù)不同的適用場景選用不同的數(shù)據(jù)庫存儲引擎。MySQL中可選的存儲引擎主要有:
(1)MyISAM:是MySQL5.5版本之前的默認(rèn)數(shù)據(jù)存儲引擎,其不支持事務(wù)、外鍵和行級鎖,是一種高速存儲引擎,擁有較高的插入、查詢速度,比較適合以查詢?yōu)橹鞯墓ぷ鲌鼍啊?/p>
(2)InnoDB:是MySQL5.5及之后版本默認(rèn)的數(shù)據(jù)存儲引擎,其支持事務(wù)、外鍵和行級鎖,支持AUTO_INCREMENT屬性,具有自動(dòng)災(zāi)難恢復(fù)能力,數(shù)據(jù)查詢速度相對MyISAM引擎要慢,比較適合于處理多重并發(fā)更新請求的場景。
(3)MERGE:這種存儲引擎是一組 MyISAM表的組合,這些 MyISAM表的結(jié)構(gòu)必須完全一致,MERGE表中并沒有數(shù)據(jù),對其的操作其實(shí)是對My-ISAM中的表進(jìn)行相應(yīng)的操作。這種引擎在一些特殊情況下具有較好的使用效果。
(4)Memory:這種存儲引擎利用內(nèi)存來創(chuàng)建表,這種類型的表訪問速度非常快,雖然提供了非常好的性能,但由于內(nèi)存不是持久性存儲設(shè)備,一旦Mysqld守護(hù)進(jìn)程崩潰,表中的內(nèi)容就會(huì)全部丟失。
(5)Archive:這種引擎對表進(jìn)行歸檔,歸檔之后僅支持插入和查詢操作,但是這種引擎擁有較好的壓縮機(jī)制,一般用作數(shù)據(jù)倉庫。
(6)CSV:一般用于使用逗號隔開的數(shù)據(jù)表文件。
數(shù)據(jù)庫的備份方式種類比較多,根據(jù)備份時(shí)數(shù)據(jù)庫服務(wù)器的在線程度可以分為熱備份、溫備份和冷備份;根據(jù)備份模式的不同可以分為物理備份和邏輯備份;根據(jù)備份內(nèi)容的不同可以分為完全備份、增量備份、差異備份,以下對每種備份方式進(jìn)行簡要介紹。
(1)熱備份:熱備份就是指數(shù)據(jù)庫服務(wù)器在運(yùn)行的狀態(tài)下對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行備份的一種方式,其技術(shù)難度較高,如果備份過程出錯(cuò)將會(huì)產(chǎn)生較嚴(yán)重的后果,備份過程基本不會(huì)對業(yè)務(wù)產(chǎn)生較大影響。
(2)溫備份:也是在數(shù)據(jù)庫服務(wù)器運(yùn)行的狀態(tài)下進(jìn)行的備份,但是需要對數(shù)據(jù)庫進(jìn)行一系列復(fù)雜的控制,復(fù)制速度較快,但是會(huì)對業(yè)務(wù),尤其是非常繁忙的數(shù)據(jù)庫服務(wù)器業(yè)務(wù)產(chǎn)生一定的影響。
(3)冷備份:也稱為脫機(jī)備份,是指數(shù)據(jù)庫服務(wù)器在正常關(guān)閉的狀態(tài)下對數(shù)據(jù)庫系統(tǒng)內(nèi)數(shù)據(jù)進(jìn)行備份的一種方式。這種方式備份速度快,便于歸檔,數(shù)據(jù)完整性、一致性程度較高,安全性也最高,但是對業(yè)務(wù)影響較大。
(4)物理備份:是以磁盤塊為基本單位將數(shù)據(jù)庫數(shù)據(jù)進(jìn)行備份的一種方式,簡單來說就是通過直接復(fù)制數(shù)據(jù)文件的方式進(jìn)行的備份。
(5)邏輯備份:是以文件為基本單位將數(shù)據(jù)庫數(shù)據(jù)進(jìn)行備份的一種方式,簡單來說就是通過數(shù)據(jù)庫文件導(dǎo)出的方式進(jìn)行的備份。
(6)完全備份:就是指將所有需要備份的數(shù)據(jù)全部進(jìn)行備份的一種方式。這種備份方式的優(yōu)點(diǎn)是對所有數(shù)據(jù)都進(jìn)行了備份,因此系統(tǒng)中的任何數(shù)據(jù)丟失都能被恢復(fù),恢復(fù)效率較高,這種備份方式的不足是備份數(shù)據(jù)量較大,備份恢復(fù)的時(shí)間都很長。
(7)差異備份:是針對完全備份而言的,其備份的是自從上一次完全備份以來所有變化了的數(shù)據(jù)。
(8)增量備份:備份自從上一次備份(包含完全備份、差異備份、增量備份)以來所有變化了的數(shù)據(jù)。
為了實(shí)現(xiàn)基于LVM快照的數(shù)據(jù)庫備份,需要具備一些基本的前提條件,主要包括:①應(yīng)當(dāng)創(chuàng)建好邏輯卷,正確掛載,并確保數(shù)據(jù)文件存放在邏輯卷上;②應(yīng)當(dāng)根據(jù)備份過程中新發(fā)生業(yè)務(wù)可能產(chǎn)生的數(shù)據(jù)量合理規(guī)劃邏輯卷大小,并確保邏輯卷所在卷組有足夠的空間,否則快照卷會(huì)由于空間耗盡而導(dǎo)致失效。具體實(shí)現(xiàn)步驟如下:
(1)在MySQL中刷新表并對表添加讀鎖,命令格式為:flush tables with read lock。該語句的作用是刷新表并添加讀鎖,即關(guān)閉所有已打開的表,清除緩存并使用全局讀鎖鎖定所有數(shù)據(jù)庫的所有表。
(2)在MySQL中刷新二進(jìn)制日志,命令格式為:flush logs。該語句的作用是滾動(dòng)二進(jìn)制日志,滾動(dòng)后將產(chǎn)生一個(gè)新的二進(jìn)制日志。由于二進(jìn)制日志在MySQL數(shù)據(jù)庫的及時(shí)點(diǎn)還原過程中具有非常重要的作用,為了方便以后對MySQL數(shù)據(jù)庫進(jìn)行還原,應(yīng)當(dāng)準(zhǔn)確標(biāo)注備份時(shí)二進(jìn)制日志的范圍。因此使用該命令就可以達(dá)到滾動(dòng)二進(jìn)制日志,標(biāo)記二進(jìn)制范圍的目的。
(3)在Linux中將MySQL數(shù)據(jù)的二進(jìn)制日志的位置信息進(jìn)行保存,命令格式為:mysql-e`show master status\G`>/backup/binlog.info。該語句的作用就是將show master status\G的執(zhí)行結(jié)果,即滾動(dòng)后新產(chǎn)生的二進(jìn)制日志文件的名字和位置保存至backup目錄下的binlog.info文件中。
(4)在Linux中創(chuàng)建快照卷,命令格式為:lvcreate-L 100M-s-p r-n mysnap/dev/myvg/mydata。該語句的作用就是使用lvcreate命令為/dev/myvg/mydata創(chuàng)建一個(gè)大小為100MB、名字叫mysnap的只讀類型的快照。
(5)在MySQL中釋放表鎖,命令格式為:unlock tables。該語句是之前加讀鎖的一個(gè)逆過程,即釋放掉之前對所有數(shù)據(jù)庫的所有表添加的全局讀鎖。
(6)在Linux中掛載快照卷對數(shù)據(jù)進(jìn)行備份,命令格 式 為:mount/dev/myvg/mysnap/mnt;cp/mnt/*/backup/。這兩條語句的作用就是掛載創(chuàng)建好的快照卷,并將快照卷中所需備份的內(nèi)容拷貝至/backup數(shù)據(jù)目錄。
(7)在Linux中卸載快照卷并移除快照卷,命令格 式 為:umount/dev/myvg/mysnap;lvremove/dev/myvg/mysnap。這兩條語句的作用就是在數(shù)據(jù)庫備份完成之后,對快照卷進(jìn)行卸載并移除快照卷。
如果使用基于LVM快照的數(shù)據(jù)庫備份的是支持事務(wù)的InnoDB存儲引擎,則應(yīng)當(dāng)確保事務(wù)日志文件與要?jiǎng)?chuàng)建快照的數(shù)據(jù)文件在同一個(gè)卷上,否則就需要對兩個(gè)文件分別進(jìn)行快照,而這樣的操作可能導(dǎo)致數(shù)據(jù)文件的快照與事務(wù)日志文件的快照時(shí)間點(diǎn)不一致。
此外,在使用InnoDB存儲引擎時(shí)一般應(yīng)將MySQL服務(wù)器的sync_binlog參數(shù)的值設(shè)置為1,這樣可以有效地避免在對數(shù)據(jù)庫進(jìn)行備份過程中存在有后臺正在寫入的事務(wù)。
通過使用LVM的快照方式對MySQL數(shù)據(jù)庫進(jìn)行備份可以達(dá)到幾乎熱備的效果,主要是由于快照是通過COW(Copy On Write)來實(shí)現(xiàn)的,其在創(chuàng)建快照卷時(shí)僅復(fù)制原卷中的元數(shù)據(jù)(Meta-Data),并沒有真正的數(shù)據(jù)復(fù)制,因此其創(chuàng)建速度非常快。同時(shí),用戶一定要確保在備份過程中,新發(fā)生業(yè)務(wù)產(chǎn)生的數(shù)據(jù)量要小于快照卷的大小,否則將會(huì)導(dǎo)致快照卷崩潰,進(jìn)而導(dǎo)致備份失敗。此外,用戶在進(jìn)行基于LVM快照的數(shù)據(jù)庫備份時(shí)應(yīng)當(dāng)根據(jù)不同的存儲引擎妥善處理好二進(jìn)制日志、事務(wù)日志等文件的備份工作,以確保在真正數(shù)據(jù)發(fā)生丟失時(shí)能夠快速、準(zhǔn)確、安全的對數(shù)據(jù)庫進(jìn)行恢復(fù)。