資料庫自動備份教學

  前幾個月寫過一個cPanel的資料庫自動備份程式,當時的做法是用FTP做異地備份,不過最近大容量信箱流行,拿一個gmail帳號來存每天的資料庫備份可以存好幾年份。第一個念頭是把之前的程式拿來改寫好了,可以自由選擇用ftp和mail也不錯,要動手時才想到php的mail函數好難用,祭出phpmailer又顯得大材小用,不到5k的程式還要附一個10倍大的檔案,乾脆先找找看有沒有現成的,找不到再自己動手寫。找了將近一小時終於發現符合需求的程式,只有一個小問題,不過問題不在程式而是我,這個程式兩年多前就有,為什麼前幾個月沒找到還自己花時間寫(懶人的想法)。程式可在phpfreaks下載,設定不算複雜,但我還是翻譯和加一點提醒(括弧中的文字)給有需要的人參考:


// 設定資料庫變數
$dbhost = ‘localhost’; //  MySQL伺服器位置 (資料庫放同主機則不需更動)
$dbuser = ‘your_username’; // MySQL資料庫使用者名稱
$dbpass = ‘yourpass’; // MySQL資料庫登入密碼
$dbname = ‘database_name’; // 資料庫名稱

// 選擇性設定

$use_gzip = "yes";  // 是否需要gzip壓縮 (建議壓縮)
$remove_sql_file = "yes"; // 壓縮後是否刪除原本的sql檔, 建議刪除
$remove_gzip_file = "no"; // 是否需要刪除gzip檔案, 建議不刪除 (除非空間很大, 否則建議刪除)
 
// 設定路徑

$savepath = "/www/htdocs/dbsender"; // 檔案放置目錄完整路徑, 最後不加斜線 (cpanel通常使用者主目錄在/home/使用者帳號)

$send_email = "yes";  // 是否用e-mail傳檔, 若是請填下列兩行
$to      = "you@yourdomain.com";  // 收信人
$from    = "r00t@yourdomain.com"; // 寄信人 (可填不用的信箱, 幫助信件自動分類)

$senddate = date("j F Y");

$subject = "MySQL Database Backup - $senddate"; // 信件標題 ($senddate是加入日期)
$message = "Your MySQL database has been backed up and is attached to this email"; // 信件內容

$use_ftp = "yes"; // 是否上傳至FTP伺服器, 若是請填下列四行
$ftp_server = "localhost"; // FTP位置 (例如ftp.server.com)
$ftp_user_name = "ftp_username"; // FTP帳號
$ftp_user_pass = "ftp_password"; // FTP密碼
$ftp_path = "/"; // 上傳至FTP的路徑

    設定好上傳到剛剛設定的檔案目錄,最好不要放在公開的網站目錄中,否則可以手動執行程式,若有人惡搞可能會導致空間不足。接下來到在主機設定工作排程(Cron Job),執行命令填 php /放置路徑/dbsender.php > /dev/null 執行時間請依資料庫更新頻率自行判斷,除非是更新很快的站台,否則一天一次已相當足夠。

  接下來到收信的信箱中設定過濾條件,使用gmail可以先建立新標籤,再選 Settings -> Filters -> Create a new filter -> 在From填入之前設定的寄信人信箱按Next Step -> 勾選Skip the inboxApply the lable(剛剛新建的標籤)後按Create Filter即可。以後的備份信件都會被自動歸類,想要回覆資料庫只要搜尋想還原的日期就可以輕鬆找到備份檔案。

   有需要gmail帳號的人可以留言,目前還有40幾個邀請可用,要xuite的也可以,不過只剩兩個,先留言先選,gmail是1gb郵件空 間,xuite只有一半但多了相簿、網誌、硬碟的功能。e-mail不要留在發言內容中,填寫電子郵件欄位就好,才不會被信件蒐集程式掃到。

三月 5日, 2005 發表於 主機使用

9 則迴響 to “資料庫自動備份教學”

  1. simon 說:

    您好,我使用這個程式有點問題,我根據您的聯結去phpfreaks下載程式回來後,設定後開始使用,不過她好像說我路徑有錯誤,我一直試改路徑,不過都沒成功,可否請指點我一下,謝謝了。我的虛擬主機顯示
    網頁目錄 /home/simon/public_html
    使用者根目錄 /home/simon

    麻煩幫我一下看路徑是要怎樣設,謝謝您了。

    我錯誤訊息:
    PHP Warning: filetype(): Lstat failed for (null) (errno=2 - No such file or directory) in /home/simon/public_html/dbsender/dbsender.php on line 85
    PHP Warning: fopen(/home/simon/dbsender/simon_forum-060705-0958pm.sql): failed to open stream: No such file or directory in /home/simon/public_html/dbsender/dbsender.php on line 91
    PHP Warning: filesize(): Stat failed for /home/simon/dbsender/simon_forum-060705-0958pm.sql (errno=2 - No such file or directory) in /home/simon/public_html/dbsender/dbsender.php on line 92
    PHP Warning: fread(): supplied argument is not a valid stream resource in /home/simon/public_html/dbsender/dbsender.php on line 92
    PHP Warning: fclose(): supplied argument is not a valid stream resource in /home/simon/public_html/dbsender/dbsender.php on line 93



  2. Max 說:

    第一行有寫No such file or directory,請再檢查一下是否路徑設定有錯或無法寫入。



  3. simon 說:

    我有開寫入的權限,我設的目錄是$savepath = “/home/simon/public_html/dbsender”
    我是把檔案傳到dbsender這個資料夾下
    謝謝站長的回應



  4. Max 說:

    把設定改成在本地保留檔案,執行後再檢查資料夾中的檔案,沒有壓縮檔或sql檔案就是無法寫入造成的。



  5. YY 說:

    您好..
    假如我想把這個程式放在Windows作業系統下執行
    就不能直接用passthru這個函式了
    有沒有其他方式可以達到同樣的目的
    請各位大大幫幫忙
    謝謝..



  6. Max 說:

    剛剛看了一下只有一行用到passthru
    passthru("mysqldump --opt -h$dbhost -u$dbuser -p$dbpass $dbname >$filename");
    把mysqldump改為mysqldump.exe的完整路徑



  7. YY 說:

    上次問的問題已經解決了.. ^^
    but我又遇到了新的問題 :sad: 我把dbsender.php灌到linux下去執行
    但是passthru()似乎沒有作用
    我換成exec()也是一樣
    我查了很多資料 都說是為了安全
    所以把很多執行檔都關了
    但是如果逼不得已要用
    有沒有辦法打開呢??



  8. Max 說:

    php安裝好應該都是開啟的,
    我不知道你說的不能使用是完全禁止還是在safe_mode下目錄沒設好,
    一般關閉只是在php.ini中加入disable_functions,
    刪除掉passthru就好了,
    前提是權限要夠一般user無法執行。



  9. jacky 說:

    為什麼在windows架設上傳到ftp後沒東西呢???

    我是用appserv架設mysql和php

    程式有寫創立一個檔案上傳到ftp去了,但到ftp看沒有呢???



發表迴響

Powered by WordPress | Theme by BOB