大家好,我是一燈,今天一塊學習一下如何優雅安全的備份MySQL資料?
1. 為什么要備份資料
先說一下為什么需要備份MySQL資料?
一句話總結就是:為了保證資料的安全性,
如果我們把資料只存盤在一個地方,如果物理機器損壞,會導致資料丟失,無法恢復,
還有就是我們每次手動修改線上資料之前,為了安全起見,都需要先備份資料,防止人為的誤操作,導致弄臟資料或弄丟資料,
2. 怎樣備份MySQL資料?
想要快速簡單粗暴備份MySQL資料,可以使用mysqldump命令:
# 備份test資料庫
mysqldump -uroot -p test > backup.db
但是這樣備份的可能包含臟資料,比如在我們備份資料的程序中,有個下單的操作正在執行,
下單之后,還沒有來得及扣款,就開始執行備份資料的命令,就會出現臟資料,
- 下單,保存訂單表
- 備份資料
- 扣款
3. 怎么安全的備份資料?
mysqldump命令也提供了以事務的形式備份的引數:
# 開啟一個事務備份test資料庫
mysqldump -uroot -p --single-transaction test > backup.db
開啟事務后,會跟正常業務操作產生鎖資源競爭,可能會阻塞其他的業務操作,嚴重的可能會導致服務宕機,所以備份操作盡量在業務低峰期執行,
還有一個問題,只有InnoDB引擎支持事務命令,對于不支持的事務MyISAM引擎,備份資料的時候怎么保證資料的安全性呢?
有一個粗暴的辦法就是設定全庫只讀,禁止寫操作,這樣備份的時候不就能保證資料安全性啦,
先用命令查看一下資料庫的只讀狀態:
show variables like 'read_only';

OFF表示只讀模式關閉,ON表示開啟只讀模式,
set global read_only=1;

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

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/513136.html
標籤:其他
上一篇:MatrixOne從入門到實踐10——物聯網平臺架構升級
下一篇:詳解數倉的鎖相關引數及視圖
