資訊無涯,回頭已不見岸

在Windows Server設定自動備份MySQL資料庫

前幾天把部落格整個搬到 Windows Server 2008 R2,連帶著相關軟體像是 MySQL 及其工具都是使用最新版本。沒想到,MySQL 的 GUI 管理工具改版為 MySQL Workbench 後,原本在管理介面就能自訂排程備份的 Backup Projects,到了這版我卻怎樣都找不到。

在網路上問了噗友,還透過搜尋引擎找到討論資料,確認 MySQL Workbench 免費版已經不包含排程備份功能。山不轉路轉,路不轉人轉,只好改用指令的方式來備份。

好在,指令也非常簡單,參考下列就能做到:

mysqldump -u '具有存取權限的帳號' -p'密碼' --database '資料庫名' > '存放路徑'\'存放檔名.sql'

舉例來說,假使資料庫名稱為「blog」,而 SQL 備份檔希望放在「D:\Backup\MySQL Database\」的目錄裡,且檔名為「mysqlbackup」,就可以參考下面輸入:

mysqldump -u root -p123456 --database blog > D:\Backup\"MySQL Database"\mysqlbackup.sql

這邊要特別提醒的是,如果你的目錄中如同範例的「MySQL Database」中間有一個空格,請務必將該目錄名稱用雙引號括起來。否則最後吐出來的位置及檔案,會變成「D:\Backup」的「MySQL」檔案。另外,存放檔案的資料夾要先建立好,否則指令找不到也不會幫你自動建。

雖然這樣一行指令可以完成備份,但離我希望的目標還有段距離:
1. 每天定時自動備份。
2. 備份檔依照日期及備份時間命名。(譬如 20110708-2100.sql)

為了解決備份檔命名及自動備份的問題,我從網路上參考這篇文章所提供的參數與指令,自行建立一個 BAT 批次檔:

@echo off

For /f "tokens=1-4 delims=/ " %%a in ('date /t') do (set dt=%%a%%b%%c)

For /f "tokens=1-4 delims=:." %%a in ('echo %time%') do (set tm=%%a%%b)

set bkupfilename=%dt%-%tm%.sql

mysqldump  -u root -p123456  --database blog > D:\Backup\"MySQL Database"\"%bkupfilename%"

那麼這個批次檔中的變數,就能建立出我希望的備份檔及名稱。接著利用 Windows 內建的工作排程器,新建一個工作排程去執行這個批次檔。

建立排程的方式也很簡單,到系統管理工具點選工作排程器,並建立基本工作。

在命名完工作排程後,選擇希望每天執行此工作的時間。

接著會是選擇執行此排程工作的類型。因為要執行的是批次檔,所以在點選「啟動程式」後,帶入希望執行的批次檔。

但這樣還不算完成。

最後請務必參考下圖做勾選設定,因為預設只會在使用者登入時執行你所建立的排程工作。
而且經過多次測試,發現想如期正常執行,還是輸入具有權限的帳號密碼比較妥當。

否則可能就只會給「0x8007051F」的錯誤訊息,然後什麼都沒做啊。 /=.=/

還有,如果希望這個排程能一天執行多次,只要到該工作的「觸發程序」去新增時間就可以囉。 /:D/

2 則留言

  1. eclee

    Dear 版主:
    感謝此一則有用的貼文,欲向 您進一步請教,我依據 您的指引做了設定,我手動點選 bat 檔,可以執行備份無誤;但我排程自動備份時 (指到同樣一支 bat 檔),該 bat 雖會執行,但卻僅能產生「空檔」(0 kb),不知 您對此狀況是否有額外的見解,感謝 (我第一次遇到這種怪事)~

    • AskaSu

      排程器或事件是否有相關錯誤訊息可提供?

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

© 2024 蘇老碎碎唸

Theme by Anders NorenUp ↑