近幾周互聯網企業頻繁暴出各類“癱瘓”事件,網易、支付寶也身負重傷,而5月28日攜程網站服務及App全站癱瘓,從事故發生至恢復長達近12小時,造成的損失不言而喻。在對攜程事件感到惋惜的同時,讓大家不由感嘆,對數據安全問題的重視已迫在眉睫。
隨著數據價值的不斷提升,數據安全問題里面,最常見的棘手問題為因黑客攻擊而造成的用戶數據泄密和丟失。縱觀互聯網高速發展的這些年,黑客攻擊事件頻發,光用戶數據泄密就已有如下九大慘案載入互聯網史冊。
由以上數據統計可以看出,每次黑客攻擊涉及的用戶數量巨大。另有數據稱,近4年的互聯網安全事故導致11.3億用戶信息泄露。而在福布斯上榜的中國企業中,大多都曾經遭受過攻擊或出現信息泄露,特別是一些掌握大量民眾個人信息的企業成為黑客攻擊的“重災區”,其中不乏國內知名大公司,中國移動、淘寶、騰訊、小米以及12306。
當網站受到攻擊,數據庫會被破壞,這時需要從備份里面恢復數據庫。防止黑客在入侵了以后,循著網站的備份腳本將備份刪除掉,或者備份設備被入侵,數據庫被破壞造成的備份丟失、泄露,是常規的備份手段難以解決的問題。因此,將數據庫安全地備份到云存儲實際上是一個比較簡單且成本很低的手段。
那么,如何安全地備份數據庫到云存儲?牛小七將分三個步驟為大家詳解。
如何導出數據
對于小數據庫或者低壓力數據庫就很簡單了,比如MySQL有mysqldump ,其它數據庫也有相對應的dump工具,這些都能很好地解決問題。高壓力數據庫一般會做一個主從結構,如果從數據庫能夠停機就很方便,因為從數據庫停機了以后不管是用dump還是直接用拷備文件,都能夠快速方便地把數據庫給導出來;如果從數據庫不能停機,建議在從數據庫下面的LVM磁盤層來處理。首先把從數據庫設為只讀并且同步所有數據到磁盤(比如 MySQL中的 FLUSHTABLES WITH READ LOCK),這種情況下數據庫的讀操作可以繼續,但磁盤上的文件不再更改。
這時,在LVM層執行snapshot操作,完成之后,釋放掉數據庫中的鎖。再從LVM的snapshot中拷貝文件,就得到一個很完整的數據庫,并且不用擔心備份了事務中間的狀態。整個流程也很快,通??梢宰龅絹喢爰壍?,而且在備份過程中從數據庫一直是可讀的,主從同步的延遲也影響很小,所以這個方案比較容易被接受,應用也比較廣。
如何安全地加密數據
黑客入侵了之后,所有的腳本和很多加密機制都暴露在黑客面前。那么,怎樣才能完成加密又能避免黑客拿到相關信息來解密你的數據呢?一個簡單的方法是用非對稱密鑰,比如gpg就支持非對稱加密,即gpg這邊生成一對公私鑰,私鑰放在自己的電腦好好保存,公鑰可以放在你的服務器上,用來加密你的數據,需要從備份恢復時才需要動用你的私鑰來解密數據。
如何安全地上傳數據到云存儲
防止客戶順著備份腳本把你的備份刪除或者覆蓋是兩個需要避免的問題。七牛云存儲有上傳憑證的概念,它是是七牛上傳時用來鑒權的一個工具,它能很好地幫助你解決這個問題:
上傳憑證中的路徑支持通配符,如 /backup/*,前后多次備份都可以使用同一個上傳憑證,不用每次準備一個新的通配符;上傳憑證具備有效期的概念,比如設一個一年的有效期,那么這一年的數據備份操作都可以用這個uptoken操作實現;上傳憑證還可以指定是否允許覆蓋原始文件。
例如,指定key的名字是 /backup/*,每次備份都可以用這個上傳憑證來上傳,指定有效期一年且不允許覆蓋,那么就可以做到方便地把你的數據備份放到云存儲,不用擔心黑客刪除或者覆蓋掉你的文件。
此外,七牛還額外做了些事情簡化提高整個備份的健壯性,比如上傳時支持分片上傳的操作,當你的數據庫比較大,100G或者更大的一個數據,想要一次性上傳成功,即使機房到機房上傳也是比較痛苦的,那么引入分片上傳的操作就可以提高上傳成功率。
備注:
上傳憑證的細節可以參考:
http://developer.qiniu.com/docs/v6/api/reference/security/upload-token.html
有一些開源項目也是關于如何備份數據庫到七牛的,比如:
* Ruby: https://github.com/lidaobing/backup2qiniu
* C#: https://github.com/abelyao/qiniu-backup
* Python: https://github.com/chitosai/backup2qiniu
大家也可以參考七牛的合作伙伴多備份的技術方案,也能為大家提供備份服務。