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