天天看點

如何使用mysqldump備份資料庫一、背景二、解決方案三、寫在後面的話

一、背景

在開發項目中,資料庫是核心資産。除了做主備備援增加可靠性外,定期備份資料也是必須的。

使用mysqldump備份資料具有操作簡單,備份和恢複時間短的優點(mysqldump備份資料生成的是批量insert語句,恢複資料時間比navcat導出的逐條插入方式快不隻一個數量級)。

總之、如果你使用的是mysql資料庫,需要備份資料,使用mysqldump就沒錯了。

二、解決方案

開發一個備份資料庫的批處理腳本,自動完成多伺服器上多資料庫的備份、資料壓縮工作。

1、首先,準備環境

建一個backup_db檔案夾:

如何使用mysqldump備份資料庫一、背景二、解決方案三、寫在後面的話

說明: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使用的指令不一樣,可以翻一手冊;都比較簡單。