前幾天把部落格整個搬到 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 內建的工作排程器,新建一個工作排程去執行這個批次檔。
建立排程的方式也很簡單,到系統管理工具點選工作排程器,並建立基本工作。
接著會是選擇執行此排程工作的類型。因為要執行的是批次檔,所以在點選「啟動程式」後,帶入希望執行的批次檔。
最後請務必參考下圖做勾選設定,因為預設只會在使用者登入時執行你所建立的排程工作。
而且經過多次測試,發現想如期正常執行,還是輸入具有權限的帳號密碼比較妥當。
Dear 版主:
感謝此一則有用的貼文,欲向 您進一步請教,我依據 您的指引做了設定,我手動點選 bat 檔,可以執行備份無誤;但我排程自動備份時 (指到同樣一支 bat 檔),該 bat 雖會執行,但卻僅能產生「空檔」(0 kb),不知 您對此狀況是否有額外的見解,感謝 (我第一次遇到這種怪事)~
排程器或事件是否有相關錯誤訊息可提供?