2014年7月13日 星期日

在 Windows 使用 PHP exec 執行 mysqldump 來備份 MySQL 並且利用排程執行批次檔(.bat) 達成每天自動備份

最近自己寫的網站資料量開始多了,於是隔幾天會自己手動在 PHPMyAdmin 備份 DB 的資料,但是幾天這樣下來,實在覺得好麻煩阿...還是寫支程式讓它自動化好了!可是 Google 到的資料大部分都是執行在 Linux 上的...(有點後悔用 Windows 架 server),所以過程非常艱辛...總共花費了我整整兩天的時間,以下就附上我的整理及研究成果吧!
在這裡主要用到的是 PHP 的執行外部指令的涵式語法 exec,而需要特別注意的幾個點有:
  1. 由於 windows 路徑是 '\' 所以記得要多加一個,變成 '\\' 才不會有問題
  2. 注意路徑中如果某個目錄含有空白字元要做特殊的處理
  3. 如果沒有設定 MySql 的 class path 的話下指令就到它的目錄底下去執行 mysqldump
  4. 要先創好備份資料所要儲存的路徑

那麼以下就附上程式碼:
  1. $oldDir = getcwd();
  2. chdir("C:\\EasyPHP-DevServer-13.1VC11\\binaries\\mysql\\bin");  //  mysql bin的路徑
  3. exec("mysqldump --opt -uUser -pPassword dbName >D:\\backup\\%date:~0,4%%date:~5,2%%date:~8,2%.sql");
  4. chdir($oldDir);

如此一來執行這個 php 檔時,便可備份 db 到指定的目錄了!而如果你發現指定目錄建的 db 檔始終是 0kb (如果不是沒資料)的話,通常都是前面的路徑設錯了(我自己主要就是在這裡卡了很久),接著網頁端寫好了就是如何讓它自動執行了!

主要就是寫支批次檔(.bat)的程式然後加入工作排程,如此便能自動在指定的時間來備份我們的 DB 了。在這裡由於我對指令或是發 request 的概念不是很熟,所以用了很笨的方法寫了兩支 bat 檔,一支用來用 ie 去執行我們剛剛寫好的網頁,但由於這樣電腦就會開啟 ie 所以要靠另一支 bat 檔來把 ie 關掉...如果大家有什麼更好的辦法請提供讓我知道喔!以下就附上程式碼:

一.用 ie 執行網頁
  1. cd C:\Program Files\Internet Explorer  //  ie 的路徑
  2. iexplore.exe "http://www.google.com"

二.關掉 ie
  1. taskkill /IM iexplore.exe  //  殺掉 ie 的程序


好啦~到此結束!希望有幫到大家唷!

沒有留言:

張貼留言