數據安全對於普通人而言會很陌生,然而早已在 DBA 心裡生根發芽。數據對於一家企業的重要程度不言而喻,個人數據的管理也是極其重要,否則當數據損壞或者永久丟失,那將是毀滅性的災難。
既然提到備份與恢復,筆者簡單介紹下 MySQL 資料庫的備份與恢復。按照備份後產生的副本文件是否可以編輯,可以將 MySQL 的備份方法分為邏輯備份和物理備份。邏輯備份可以簡單理解成跟版本無關的 SQL 文件,物理備份是磁碟文件的快照。數據備份期間,按照是否需要停止 MySQL 服務實例,可以將 MySQL 的數據恢復分為:冷備份、溫備份和熱備份。線上系統中,溫備與熱備使用較多,冷備常常用於歸檔。按照副本文件的缺失程度可以將數據備份分為完全備份以及增量備份。比如我們使用 mysqldump 備份,指定了 --all-databases 參數,此時就是一個完全備份。另外,我們可以使用 Percona 公司提供的 xtrabackup 工具實現完全備份與增量備份。線上系統,我們需要針對不同的業務場景採用合理的備份策略,定期巡檢,並且做好備份恢復測試。另外,我們還可以根據備份需求,設計一套備份平臺。
好了,MySQL 資料庫的備份與恢復就講到這裡。
時光回到 2017 年 9 月,macOS High Sierra 公測版可以對外下載。macOS High Sierra 最大的變化是文件系統升級為 APFS,按捺不住激動心情的我,花了一個晚上下載,然後在線升級。結果悲劇的事情發生,升級完成之後不能進入系統,進入恢復模式重裝也不行。萬幸的是,升級前手工備份了重要文件,基本保證了數據的可用。不過還是有少量文件丟失,損失尚可接受。折騰許久,最後只好採用在線重裝,版本回退到 macOS Sierra。
經歷這樣一次數據災難,開始反思自己的備份策略。從 9 月到現在兩個月的思考和踐行,個人認為還是很有參考價值,在此和讀者分享。
第一,所有軟體開啟雲同步。
一個軟體對於用戶而言,包含了數據和配置,如果軟體提供了雲同步功能,我們可以保證軟體數據的安全。這裡有一個建議,如果軟體集成了 Dropbox,我們最好選擇 Dropbox 進行數據備份。那配置文件呢?接下來我們展開講講。
第二,mackup 備份配置文件。
前面我們提到了數據的備份,這裡講一下配置文件怎麼備份。配置文件備份推薦使用 mackup,這是一個使用 Python 編寫的開源的配置文件備份工具。我們可以利用 mackup 將配置文件備份到 Dropbox,軟體配置稍有變更,立即同步到 Dropbox。除了同步到 Dropbox,mackup 還支持同步到 Google Drive、Copy、iCloud、Box 等。目前 mackup 支持的軟體眾多,基本上常用的軟體都有囊括。mackup 實際上是將本地的配置軟體做了一個軟鏈到 Dropbox 目錄,比如個人 home 目錄有一個 gitconfig 文件,mackup 就會做如下的軟鏈:
lrwxr-xr-x 1 robinwen staff 41B Oct 2 08:53 .gitconfig -> /Users/robinwen/Dropbox/Mackup/.gitconfig
使用 mackup 備份配置文件非常方便,執行 mackup backup 即可備份,如果要恢復,執行 mackup restore 即可。讀者不妨嘗試下。
第三,數據備份多份。
定期備份重要文件到移動硬碟也是很有必要的。很多時候我們並不會將重要文件同步到雲,一來是這些文件比較隱私,二來這些文件可能比較大。我們可以制定一個策略,比如一周一次,定期將重要文件拷貝到移動硬碟的備份歸檔目錄。正所謂不要把雞蛋放在同一個籃子裡,文件還需要存儲幾個副本。比如一個重要文件損壞、誤刪或者丟失,我們希望達到的效果是:可以從 A 移動硬碟恢復,也可以從 B 移動硬碟恢復,還可以從 Time Machine 備份恢復、還可以從 Dropbox Plus 雲備份恢復。接下來我們接著講 Time Machine 備份和 Dropbox Plus 備份。
第四,Time Machine 備份。
Time Machine 可以說是 Mac 平臺目前最好的備份方案。Time Machine 真得像是時光機,可以自由穿梭到任何一個可以去到的地方。我們可以準備一個移動硬碟,選擇非工作時間,將硬碟插入硬碟,打開 Time Machine,開啟自動備份,讓 Mac 在晚上繼續飛吧。至於 Time Machine 專用移動硬碟需要多大,這個因人而異,取決於你的錢包和備份頻率。一般用於 Time Machine 的專用移動硬碟至少是 Mac 硬碟總空間的 2 倍以上。Time Machine 第一次備份是全量備份,會佔用比較大的磁碟空間,當然我們可以排除不必要的文件。第一次全量備份之後,以後的備份都是增量備份,佔用空間會比較小。這裡有一個建議,Time Machine 開啟加密備份。讀者想想啊,Time Machine 備份可是 Mac 的全量拷貝,如果沒有加密,假如移動硬碟丟失,別人拿到之後就可以完整地恢復,細思恐極。為了最大程度保障數據的安全,我們需要開啟加密備份。這裡有個技巧,不要在 Time Machine 設置加密,而是利用磁碟工具將移動硬碟加密,每次備份之前輸入磁碟的加密密碼,這樣備份過程才會比較順暢。如果使用 Time Machine 提供的加密,它的機制是等備份完成再加密,你將會發現從晚上等到第二天白天,進度條還在那裡,不增不減,很是惱人。另外,在 AppSo 還有一系列 Time Machine 使用教程 [^1],讀者可以參考下。
第五,Dropbox Plus 雲備份。
數據是無價的,假如 Mac 系統崩潰,假如移動硬碟損壞,假如平時又沒有做任何備份,那這樣數據災難帶來的損失是無可估量的。我們需要為美好的事物付費,Dropbox 就是其中之一。因為一些不可描述的原因,Dropbox 無法正常訪問,但這並不能阻礙 Dropbox 成為一款成功而優雅的雲同步工具。準備地說,Dropbox 是同步盤而不是雲盤。Dropbox Plus 和 Dropbox Pro 都只有 1T 的空間。1T 的空間對於正常的用戶已經足夠了,一個人一生的重要文件並沒有這麼多。當然如果你把一些影音文件放 Dropbox,筆者也幫不了你。每年 99 美金的價格,對於視時間為生命的人來說,一點也不昂貴。自從用上了 Dropbox Plus,所有重要文件實時同步,這絲滑順暢的用戶體驗簡直太贊。如果你想本地存一份,本地修改然後實時同步到 Dropbox,沒有問題,我們可以借鑑 mackup 的實現,實際上就是利用軟鏈。比如有一個 Work 的目錄,只需要執行 ln -s ~/Documents/Work ~/Dropbox/Documents 就可以同步到 Dropbox。相信我,Dropbox 絕對值得擁有,當然,推薦之後對我並沒有絲毫好處。
至於為什麼不選國內的網盤,簡單講就是不信任,天知道國內廠商會拿這些文件做啥,還有某網盤無故刪除用戶文件之類的已經是家常便飯。除了 Dropbox,筆者認為還可以考慮 Google Drive。至於為什麼不推薦 iCloud,從 Apple 將在貴州建立數據中心來看[^2],不再信任 iCloud 了。當然這是筆者的判斷,至於怎麼取捨還是讀者自行分析。其實即使 Apple 不在貴州建數據中心,iCloud 這用戶體驗依然很糟糕。
第六,定期淘汰移動硬碟。
剛好 2017 年 10 月又發生一件事情,大學時間就在使用的移動硬碟莫名其妙地就不能識別了。好在之前有做數據遷移,裡面基本上沒有什麼重要文件。這裡有一個常識,硬碟是有壽命的,我們需要整理一個移動硬碟表格,裡面包含移動硬碟的生產時間、購買時間、使用時間、存放文件類型列表、硬碟重要程度等。通常移動硬碟使用 3 年左右就需要更換了,我們需要提前準備好新的移動硬碟,將舊的移動硬碟上的文件轉移過去。
第七,重要文件加密。
備份與加密是對孿生兄弟,沒有加密的備份還是不靠譜的。我們可以使用 Python 編寫自動生成隨機密碼的腳本,然後對重要文件壓縮加密。隨機密碼的實現方式,我們可以自定義一個數據字典,比如包含大寫字母、小寫字母、數字、特殊符號,然後隨機生成密碼。密碼的位數最好 32 位以上,筆者通常都是使用 64 位的密碼對重要文件進行加密。
講完個人在備份上的思考和踐行,接下來我們再來看下霍炬老師的備份方案:
備份主機是一臺安裝了 FreeBSD 系統的 NAS ,用 ZFS 把硬碟組成 raid-Z 做為存儲系統。
在各計算機和 NAS 上安裝 syncthing,設置需要備份的文件目錄和 NAS 同步,這樣就把全家各臺機器,包括虛擬機內部需要備份的文件都放到了 NAS 的存儲上。syncthing 本身支持比較簡單的文件版本,但是我沒使用這一特性,主要使用它的同步功能。文件版本通過 ZFS 的 snapshot 功能實現。
開源版本的 ZFS 沒有原生加密功能,而對於備份系統,加密是必須的。所以我在 FreeBSD 上使用 PEFS 做為加密方案,缺點是加密之後會使得 ZFS 壓縮功能幾乎失效,不過無所謂,硬碟空間並不值錢,何況前面說過,規劃好需要備份的重要文件本身也不會太大。
使用 ZFS 快照並且做遠程同步,我所知道的最好工具是 zrep。在我的系統上,使用 zrep,每 10 分鐘對已加密文件系統做一次快照,並把快照同步到異地節點。同步節點同樣需要使用 FreeBSD 和 ZFS。
我設置了兩個快照同步節點,一個較快的節點位於附近城市,一個較慢的節點位於另外一片大陸。 我實際使用案例中,這兩個節點分別位於蒙特婁和北京。 加上我自己家裡的 NAS,三個節點可以保證在人為災難(硬體損壞,火災)和自然災害(地震,水災)等影響下仍然至少存活一個備份,是比較可靠的方案。
最後需要提醒的是,用作備份的 ZFS 系統,只應該使用 BSD/Solaris,其他系統上 ZFS 的移植可靠性沒那麼高。[^3]
看完霍炬老師的備份方案,實在是汗顏,真極客。後續筆者也打算自建 NAS,對數據進行容災備份。
根據墨菲定律,凡是可能出錯的事必定會出錯。在計算機世界裡,沒有任何系統、任何組件是 100% 靠譜的。在架構世界裡,高可用是非常重要的考慮點。在現實世界裡,也有很多黑天鵝事件。做好數據安全策略,比如軟體開啟雲同步、數據備份多份、Time Machine 雲備份、Dropbox Plus 雲備份、定期淘汰硬碟、重要文件加密、有條件做 NAS等。數據是無價的,不要等到數據無法恢復時再後悔莫及。
1: https://goo.gl/UCLWWb
2: https://goo.gl/GPc1x9
3: https://goo.gl/yvnh5k
最後,筆者開通了圈子,期待你的加入。
本圈子名字來源於同名博客「https://dbarobin.com」。
圈子建立初心:與價值觀趨同的人交朋友。
本圈子有但不僅限於:「資料庫知識和經驗」「軟體應用分享」「科技人文」「文章評論」「音樂藝術」「哲學哲思」等一系列看上去亂糟糟的獨創或者二次信息傳播。
我們生存在三個世界中,第一個是真實的世界,第二個是網際網路世界,第三個價值世界。希望我們能在價值世界裡自由行走。
點擊「閱讀原文」加入圈子。