如何優(yōu)雅安全的備份MySQL數(shù)據(jù)
1. 為什么要備份數(shù)據(jù)
先說一下為什么需要備份MySQL數(shù)據(jù)?
一句話總結(jié)就是:為了保證數(shù)據(jù)的安全性。
如果我們把數(shù)據(jù)只存儲在一個地方,如果物理機(jī)器損壞,會導(dǎo)致數(shù)據(jù)丟失,無法恢復(fù)。
還有就是我們每次手動修改線上數(shù)據(jù)之前,為了安全起見,都需要先備份數(shù)據(jù)。防止人為的誤操作,導(dǎo)致弄臟數(shù)據(jù)或弄丟數(shù)據(jù)。
2. 怎樣備份MySQL數(shù)據(jù)?
想要快速簡單粗暴備份MySQL數(shù)據(jù),可以使用mysqldump命令:
# 備份test數(shù)據(jù)庫 mysqldump -uroot -p test > backup.db
但是這樣備份的可能包含臟數(shù)據(jù),比如在我們備份數(shù)據(jù)的過程中,有個下單的操作正在執(zhí)行。
下單之后,還沒有來得及扣款,就開始執(zhí)行備份數(shù)據(jù)的命令,就會出現(xiàn)臟數(shù)據(jù)。
下單,保存訂單表
備份數(shù)據(jù)
扣款
3. 怎么安全的備份數(shù)據(jù)?
mysqldump命令也提供了以事務(wù)的形式備份的參數(shù):
# 開啟一個事務(wù)備份test數(shù)據(jù)庫 mysqldump -uroot -p --single-transaction test > backup.db
開啟事務(wù)后,會跟正常業(yè)務(wù)操作產(chǎn)生鎖資源競爭,可能會阻塞其他的業(yè)務(wù)操作,嚴(yán)重的可能會導(dǎo)致服務(wù)宕機(jī),所以備份操作盡量在業(yè)務(wù)低峰期執(zhí)行。
還有一個問題,只有InnoDB引擎支持事務(wù)命令,對于不支持的事務(wù)MyISAM引擎,備份數(shù)據(jù)的時候怎么保證數(shù)據(jù)的安全性呢?
有一個粗暴的辦法就是設(shè)置全庫只讀,禁止寫操作,這樣備份的時候不就能保證數(shù)據(jù)安全性啦。
先用命令查看一下數(shù)據(jù)庫的只讀狀態(tài):
show variables like 'read_only';
OFF表示只讀模式關(guān)閉,ON表示開啟只讀模式。
set global read_only=1;
這樣設(shè)置其實(shí)是非常危險(xiǎn)的,如果客戶端連接斷開,整個數(shù)據(jù)庫也會一直處于只讀模式,無法進(jìn)行寫操作。
更推薦的辦法是設(shè)置全局鎖 FTWRL(flush tables with read lock)。
# 設(shè)置全局鎖,禁止寫操作 flush tables with read lock; # 釋放鎖 unlock tables;
設(shè)置全局鎖之后,如果客戶端斷開,會自動釋放鎖,更安全。
4. 怎么恢復(fù)數(shù)據(jù)?
通過備份文件恢復(fù)數(shù)據(jù)也非常簡單:
# 把備份文件數(shù)據(jù)導(dǎo)入到test數(shù)據(jù)庫 mysqldump -uroot -p test < backup.db
到此這篇關(guān)于如何優(yōu)雅安全的備份MySQL數(shù)據(jù)的文章就介紹到這了,更多相關(guān)備份MySQL數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Windows下MySQL5.6查找my.ini配置文件的方法
今天小編就為大家分享一篇Windows下MySQL5.6查找my.ini配置文件的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06Mysql?InnoDB引擎中的數(shù)據(jù)頁結(jié)構(gòu)詳解
這篇文章主要為大家介紹了Mysql?InnoDB引擎中的數(shù)據(jù)頁結(jié)構(gòu)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05詳解MySQL的主從復(fù)制、讀寫分離、備份恢復(fù)
本篇文章主要對MySQL的主從復(fù)制、讀寫分離、備份恢復(fù)進(jìn)行詳細(xì)全面的講解,具有很好的參考價值,需要的朋友一起來看下吧2016-12-12MySql如何使用not in實(shí)現(xiàn)優(yōu)化
這篇文章主要介紹了MySql如何使用not in實(shí)現(xiàn)優(yōu)化,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-03-03MySQL的指定范圍隨機(jī)數(shù)函數(shù)rand()的使用技巧
這篇文章主要介紹了MySQL的指定范圍隨機(jī)數(shù)函數(shù)rand()的使用技巧,需要的朋友可以參考下2016-09-09mysql死鎖(dead lock)與鎖等待(lock wait)的出現(xiàn)解決
死鎖和鎖等待是數(shù)據(jù)庫運(yùn)維中常見的問題,區(qū)別在于死鎖會自動解除,而鎖等待需要手動處理,本文就來介紹一下mysql死鎖(dead lock)與鎖等待(lock wait),感興趣的可以了解一下2024-09-09