MYSQL自動備份策略的選擇與優(yōu)劣點分析
目前流行幾種備份方式:
1、邏輯備份:
使用mysql自帶的mysqldump工具進行備份。備份成sql文件形式。
優(yōu)點:最大好處是能夠與正在運行的mysql自動協(xié)同工作,
在運行期間可以確保備份是當(dāng)時的點,它會自動將對應(yīng)操作的表鎖定,不允許其他用戶修改(只能訪問)??赡軙柚剐薷牟僮鳌ql文件通用方便移植。
缺點:備份的速度比較慢。如果是數(shù)據(jù)量很多的時候。就很耗時間。如果數(shù)據(jù)庫服務(wù)器處在提供給用戶服務(wù)狀態(tài),在這段長時間操作過程中,意味著要鎖定表(一般是讀鎖定,只能讀不能寫入數(shù)據(jù))。那么服務(wù)就會影響的。
備注:所謂的與mysql服務(wù)器能夠自動協(xié)同工作,實際上是指加參數(shù)來控制mysql服務(wù)器,比如鎖定所有表只能進行讀,不能進行寫操作。
--lock-all-tables
2、物理備份:
直接拷貝mysql的數(shù)據(jù)目錄。缺點,你不能去操作正在運行的mysql服務(wù)器(在拷貝的過程中有用戶通過應(yīng)用程序訪問更新數(shù)據(jù),這樣就無法備份當(dāng)時的數(shù)據(jù))
可能無法移植到其他機器上去。
直接拷貝只適用于myisam類型的表。這種類型的表是與機器獨立的。但實際情況是,你設(shè)計數(shù)據(jù)庫的時候不可能全部使用myisam類型表。你也不可能:因為myisam類型表與機器獨立,方便移植,于是就選擇這種表,這并不是選擇它的理由。
更多的情況是,你會根據(jù)業(yè)務(wù)特點(比如你需要支持事務(wù)機制就必須使用innodb),查詢速度和服務(wù)性能來選擇表類型的。
必須保證表不被使用中。
如果服務(wù)器在你則正在拷貝一個表時改變它,拷貝就失去意義。
如果數(shù)據(jù)庫表在文件系統(tǒng)備份過程中被修改,進入備份的表文件主語不一致的狀態(tài),而對以后的恢復(fù)表將失去意義。
保證你的拷貝完整性的最好方法是:關(guān)閉服務(wù)器,拷貝文件,然后重啟服務(wù)器。
或者是,要鎖定對應(yīng)的表(對前端用戶造成訪問問題)。
解釋直接拷貝文件,為什么不具備可移植性?
mysqldump 產(chǎn)生可移植到其他機器、甚至具有不同硬件結(jié)構(gòu)的機器上的文本文件。直接拷貝文件不能夠移植到其他機器上,除非要拷貝的表使用MyISAM 存儲格式。ISAM 表只能在具有相同硬件結(jié)構(gòu)的機器之間進行拷貝。例如,將文件從S PARC 的Solaris 機器拷貝到Intel 的Solaris 機器(或者相反)是行不通的。由MySQL3.23 引進的MyISAM 表存儲格式可以解決這個問題,因為該格式與機器獨立。因此,如果以下兩個條件都滿足的話,直接拷貝文件可以移植到具有不同硬件結(jié)構(gòu)的機器上:即另一臺機器上也必須運行MySQL3.23 以上的版本,并且文件必須表示成MyISAM 表,而不是ISAM 表。
3、雙機熱備份。
mysql數(shù)據(jù)庫沒有增量備份的機制。當(dāng)數(shù)據(jù)量太大的時候備份是一個很大的問題。還好mysql數(shù)據(jù)庫提供了一種主從備份的機制(也就是雙機熱備)
優(yōu)點:適合數(shù)據(jù)量大的時候?,F(xiàn)在明白了。大的互聯(lián)網(wǎng)公司對于mysql數(shù)據(jù)備份,都是采用熱機備份。搭建多臺數(shù)據(jù)庫服務(wù)器,進行主從復(fù)制。
主從復(fù)制經(jīng)常遇到的問題就是,如何保證數(shù)據(jù)不堵塞,不延遲。這個問題還是可以容忍的,有一些方案可以改善。畢竟有得有失的。這已經(jīng)是很省心省力的方式了。
我目前應(yīng)該使用什么樣的備份策略的權(quán)衡:
物理備份,恢復(fù)快,當(dāng)然最好是存儲在一個機器上。我現(xiàn)在是用物理備份還是邏輯備份為好呢?
考慮到以后會遷移平臺。為了保證通用性?;謴?fù)速度1分鐘左右的差距我是可以容忍的。所以我為了跨平臺,我更加愿意使用邏輯備份。存儲sql文件形式。
雙熱機備份方式,目前硬件沒有多個。技術(shù)人員有限,需要人力去維護,比較麻煩。所以排除在外。
方案:
1、總體策略:寫個定時執(zhí)行任務(wù)。定時在晚上或凌晨自動備份(考慮數(shù)據(jù)庫服務(wù)器在運行中不能停機)
代碼中做成備份成功后,把以前的刪掉。避免很多數(shù)據(jù)占據(jù)磁盤。
2、考慮到初期數(shù)據(jù)量這么小。使用mysqldump進行備份吧。設(shè)置在凌晨幾點(4-6點這個時候基本上沒什么人訪問)的時候自動備份。
3、使用邏輯備份方式:恢復(fù)速度1分鐘左右的差距我是可以容忍的。所以我為了跨平臺,我更加愿意使用邏輯備份。存儲sql文件形式。
4、每天都進行備份。
由于是在凌晨的時候mysqldump去鎖定,訪問數(shù)據(jù)庫服務(wù)器。對服務(wù)器幾乎沒什么影響。所以每天都可以備份。每天都一個sql文件。那么將會很多文件。
所以,每次備份成功后。刪除以前的文件。保留最近一個星期的備份sql文件。
備份工具的路徑:/usr/bin/mysqldump
備份數(shù)據(jù)保存路徑:/data/backdata/
5、備份腳本的編寫
思路:
5.1 在shell腳本中調(diào)用mysqldump生成備份文件(這個工具可以生成sql文件到磁盤上去)
5.2 為了方便以后查找。每次備份的記錄記錄成日志形式。幾點進行了備份操作,生成了什么文件名稱。這樣可以方便以后查閱哪天是否沒有成功備份
刪除的文件作為日志信息也記錄下來。
5.3 讓linux下的crontab進程調(diào)用腳本執(zhí)行。
命令:crontab -e
打開的文件中加入代碼:0 05 * * * 腳本的路徑/mysqlback.sh
mysqlback.sh的內(nèi)容:
# /bin/bash
DB_NAME="****"
DB_USER="****"
DB_PASS="****"
BIN_DIR="/usr/bin"
BACK_DIR="/data/backdata"
DATE="mysql-`date +'%Y%m%d-%H:%M:%S'`"
LogFile="$BACK_DIR"/dbbakup.log #日志記錄保存的目錄
BackNewFile=$DATE.sql
$BIN_DIR/mysqldump --opt --force -u$DB_USER -p$DB_PASS $DB_NAME > $BACK_DIR/$DATE.sql
echo -----------------------"$(date +"%y-%m-%d %H:%M:%S")"----------------------- >> $LogFile
echo createFile:"$BackNewFile" >> $LogFile
#find "/data/backdata/" -cmin +1 -type f -name "*.sql" -print > deleted.txt
find "/data/backdata/" -ctime +7 -type f -name "*.sql" -print > deleted.txt
echo -e "delete files:\n" >> $LogFile
#循環(huán)刪除匹配到的文件
cat deleted.txt | while read LINE
do
rm -rf $LINE
echo $LINE>> $LogFile
done
echo "---------------------------------------------------------------" >> $LogFile
相關(guān)文章

網(wǎng)絡(luò)工程師必備的6款配置文件編輯神器:替代Notepad++!
本期文章介紹了六種網(wǎng)工必備工具,這些工具是網(wǎng)絡(luò)工程師日常工作中必不可少的,也是那些立志成為網(wǎng)絡(luò)工程師的人應(yīng)該熟悉的2026-04-13
首個版本v1.111已上線! VS Code開啟周更狂飆模式
026年3月10日,微軟宣布將Visual Studio Code(VS Code)更新節(jié)奏從月更提速至周更,并發(fā)布首個周更版本v1.1112026-03-11
AI直接調(diào)試瀏覽器! VS Code重大更新發(fā)布
還在手動打開瀏覽器、點擊按鈕、檢查控制臺報錯?太累了!現(xiàn)在,最新的VS Code 1.110中AI可以直接調(diào)試瀏覽器2026-03-10
今天帶大家來共同學(xué)習(xí)VC++6.0無法正常運行怎么辦?下面就是詳細(xì)完整的操作步驟,快跟小編一起來學(xué)習(xí)一下2026-02-27
vscode調(diào)試c代碼始終找不到exe可執(zhí)行文件的詳細(xì)及解決辦法
在 VS Code 中調(diào)試 C++ 項目時,常見報錯:“無法啟動調(diào)試會話:找不到可執(zhí)行文件”,這個問題問題通常是由于環(huán)境配置不當(dāng)、缺少編譯步驟、路徑設(shè)置錯誤、或是launch.json2026-02-27
vscode入門! 小白都能看懂的VS Code保姆級級使用教程
相對于其它前端工具來說,VSCode顯得更加的流暢,今天就將我的學(xué)習(xí)經(jīng)歷和大家分享一下,希望可以幫助到有需要的人2026-02-27
2026年真正值得裝、用得上、不雞肋的 VSCode 插件,其實沒那么多——挑10個“神級”不難,但得是每天打開就用、關(guān)掉就難受的那種2026-02-10
VS Code 和 VSCodium怎么選? vscode 和 vscodium之間的區(qū)別
咱們今天就來聊聊 Visual Studio Code (VS Code) 和 VSCodium的相似與區(qū)別,詳細(xì)請看下文介紹2026-01-10
如何啟用.NET Framework3.5? 一鍵安裝net3.5解決軟件依賴問題
你是否曾在安裝某些軟件時遇到過“需要.NET Framework 3.5”的提示?實,只需要幾步簡單的操作,你就可以輕松解決這個問題2025-10-28
VS Code中Java擴展代碼重構(gòu)功能的使用詳解
在軟件開發(fā)過程中,重構(gòu)是一個非常重要的環(huán)節(jié),重構(gòu)可以提高代碼的可讀性、可維護性和可擴展性,使代碼更加健壯和易于理解,本文將介紹如何使用 VSCode 進行 Java 代碼重構(gòu)2025-09-20





