如何優雅的備份MySQL數據?看這篇文章就夠了

大家好,我是一燈 , 今天一塊學習一下如何優雅安全的備份MySQL數據?
1. 為什么要備份數據先說一下為什么需要備份MySQL數據?
一句話總結就是:為了保證數據的安全性 。
如果我們把數據只存儲在一個地方,如果物理機器損壞,會導致數據丟失,無法恢復 。
還有就是我們每次手動修改線上數據之前,為了安全起見,都需要先備份數據 。防止人為的誤操作,導致弄臟數據或弄丟數據 。
2. 怎樣備份MySQL數據?想要快速簡單粗暴備份MySQL數據 , 可以使用mysqldump命令:
【如何優雅的備份MySQL數據?看這篇文章就夠了】# 備份test數據庫mysqldump -uroot -p test > backup.db但是這樣備份的可能包含臟數據 , 比如在我們備份數據的過程中,有個下單的操作正在執行 。
下單之后,還沒有來得及扣款,就開始執行備份數據的命令,就會出現臟數據 。

  1. 下單,保存訂單表
  2. 備份數據
  3. 扣款
3. 怎么安全的備份數據?mysqldump命令也提供了以事務的形式備份的參數:
# 開啟一個事務備份test數據庫mysqldump -uroot -p --single-transaction test > backup.db開啟事務后,會跟正常業務操作產生鎖資源競爭,可能會阻塞其他的業務操作 , 嚴重的可能會導致服務宕機,所以備份操作盡量在業務低峰期執行 。
還有一個問題,只有InnoDB引擎支持事務命令,對于不支持的事務MyISAM引擎 , 備份數據的時候怎么保證數據的安全性呢?
有一個粗暴的辦法就是設置全庫只讀,禁止寫操作,這樣備份的時候不就能保證數據安全性啦 。
先用命令查看一下數據庫的只讀狀態:
show variables like 'read_only';
如何優雅的備份MySQL數據?看這篇文章就夠了

文章插圖
OFF表示只讀模式關閉 , ON表示開啟只讀模式 。
set global read_only=1;
如何優雅的備份MySQL數據?看這篇文章就夠了

文章插圖
這樣設置其實是非常危險的 , 如果客戶端連接斷開,整個數據庫也會一直處于只讀模式,無法進行寫操作 。
更推薦的辦法是設置全局鎖  FTWRL(flush tables with read lock) 。
# 設置全局鎖,禁止寫操作flush tables with read lock;# 釋放鎖unlock tables;設置全局鎖之后,如果客戶端斷開,會自動釋放鎖,更安全 。
4. 怎么恢復數據?通過備份文件恢復數據也非常簡單:
# 把備份文件數據導入到test數據庫mysqldump -uroot -p test < backup.d

    推薦閱讀