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