一、背景
在開發項目中,資料庫是核心資産。除了做主備備援增加可靠性外,定期備份資料也是必須的。
使用mysqldump備份資料具有操作簡單,備份和恢複時間短的優點(mysqldump備份資料生成的是批量insert語句,恢複資料時間比navcat導出的逐條插入方式快不隻一個數量級)。
總之、如果你使用的是mysql資料庫,需要備份資料,使用mysqldump就沒錯了。
二、解決方案
開發一個備份資料庫的批處理腳本,自動完成多伺服器上多資料庫的備份、資料壓縮工作。
1、首先,準備環境
建一個backup_db檔案夾:
說明:mysql.exe、mysqldump.exe從mysql資料庫bin目錄下拷貝。7z.exe和7z.dll從7z安裝目錄下拷貝(推薦使用7z,免費又好用)。
2、其次,開發腳本
編輯上面截圖中的backup.bat檔案。
@echo off
set curDir=%CD%
::、初始化待備份資料庫IP位址與資料庫名稱的對應關系
set dbIpMap="192.168.1.102,testdb1"^
"192.168.1.102,testdb2"^
"192.168.1.102,testdb3"
::、建立存放資料庫備份檔案的臨時檔案夾
set folderName=%DATE:~,%%DATE:~5,2%%DATE:~,%%TIME:~0,2%%TIME:~,%%TIME:~6,2%
mkdir "%curDir%\%folderName%"
::設定變量延時指派
setlocal ENABLEDELAYEDEXPANSION
::、循環備份資料庫中的所有表結構和資料
for %%a in (%dbIpMap%) do (
set dbPair=%%a
::删除引号
set dbip=!dbPair:"=!
@echo 正在備份資料庫:!dbip!...
for /f "delims=, tokens=1,2" %%i in ("!dbip!") do (
set ip=%%i
set dbName=%%j
mysqldump -h192.. -uroot !dbName!>"%curDir%\%folderName%\!dbName!.sql"
)
@echo 備份資料庫完成!
::備份的檔案可能比較大,做一下壓縮
z a "%curDir%\%folderName%\!dbName!.zip" "%curDir%\%folderName%\!dbName!.sql"
::備份後删除原始檔案
del /f "%curDir%\%folderName%\!dbName!.sql"
)
編寫完上面的批處理腳本後,可以把它添加到作業系統的定時任務裡面,這樣就每天定時備份了,不用人工幹預。
三、寫在後面的話
備份檔案經過壓縮後已經極大縮小了(文本檔案的壓縮比是很高的),但日積月累還是可能很占磁盤空間,特别是資料量很大的情況下。
可以再加一些腳本處理,将壓縮後的檔案上傳到公司的配置庫上,這樣既解決了磁盤空間問題也解決了防資料丢失的問題。這塊要看公司使用的是什麼配置庫, SVN/ClearCase/Git使用的指令不一樣,可以翻一手冊;都比較簡單。