如果大家關注新聞的話應該偶爾也會遇到,有些程序員離職的時候發(fā)生了刪庫等報復性操作,所以備份數(shù)據(jù)庫數(shù)據(jù)就顯得非常重要了,就算不怕刪庫也要預防網(wǎng)絡攻擊,下面我們就簡單來了解一下,備份MySQL數(shù)據(jù)庫操作方法。

1.為什么要備份數(shù)據(jù)
先說一下為什么需要備份MySQL數(shù)據(jù)?
一句話總結(jié)就是:為了保證數(shù)據(jù)的安全性。
如果我們把數(shù)據(jù)只存儲在一個地方,如果物理機器損壞,會導致數(shù)據(jù)丟失,無法恢復。
還有就是我們每次手動修改線上數(shù)據(jù)之前,為了安全起見,都需要先備份數(shù)據(jù)。防止人為的誤操作,導致弄臟數(shù)據(jù)或弄丟數(shù)據(jù)。
2.怎樣備份MySQL數(shù)據(jù)?
想要快速簡單粗暴備份MySQL數(shù)據(jù),可以使用mysqldump命令:
#備份test數(shù)據(jù)庫
mysqldump-uroot-ptest>backup.db
但是這樣備份的可能包含臟數(shù)據(jù),比如在我們備份數(shù)據(jù)的過程中,有個下單的操作正在執(zhí)行。
下單之后,還沒有來得及扣款,就開始執(zhí)行備份數(shù)據(jù)的命令,就會出現(xiàn)臟數(shù)據(jù)。
3.怎么安全的備份數(shù)據(jù)?
mysqldump命令也提供了以事務的形式備份的參數(shù):
#開啟一個事務備份test數(shù)據(jù)庫
mysqldump-uroot-p--single-transactiontest>backup.db
開啟事務后,會跟正常業(yè)務操作產(chǎn)生鎖資源競爭,可能會阻塞其他的業(yè)務操作,嚴重的可能會導致服務宕機,所以備份操作盡量在業(yè)務低峰期執(zhí)行。
還有一個問題,只有InnoDB引擎支持事務命令,對于不支持的事務MyISAM引擎,備份數(shù)據(jù)的時候怎么保證數(shù)據(jù)的安全性呢?
有一個粗暴的辦法就是設置全庫只讀,禁止寫操作,這樣備份的時候不就能保證數(shù)據(jù)安全性啦。
先用命令查看一下數(shù)據(jù)庫的只讀狀態(tài):
showvariableslike'read_only';
OFF表示只讀模式關閉,ON表示開啟只讀模式。
setglobalread_only=1;
這樣設置其實是非常危險的,如果客戶端連接斷開,整個數(shù)據(jù)庫也會一直處于只讀模式,無法進行寫操作。
更推薦的辦法是設置全局鎖FTWRL(flushtableswithreadlock)。
#設置全局鎖,禁止寫操作
flushtableswithreadlock;
#釋放鎖
unlocktables;
設置全局鎖之后,如果客戶端斷開,會自動釋放鎖,更安全。






