[教學]cPanel空間定時自動備份資料庫並寄至信箱

對於一個網站、部落格、論壇來說,最重要的東西末屬於資料庫。資料庫裡面放著你網站的所有資料,包括:網站文章、回覆、網站設定……等。對網站管理員來說經常的備份資料庫是很重要的,萬一主機掛點、資料遺失、被駭客入侵,都還可以利用先前備份的數據進行還原,讓網站能夠盡快恢復現狀、也讓損失降至最低。

使用WordPress的用戶大多都會安裝一個備份資料庫的外掛:WordPress Database Backup或WP-DBmanager,讓外掛自動替你備份資料庫。用外掛備份最大的好處就是可以自己設定時間避免自己忘記或沒空備份,也防止空間掛點可能造成的遺憾。俗話說:多一個外掛就會拖累主機一點速度,因此我們可以利用Cpanel空間的自動排程「Cron Jobs」來備份資料庫,也替你省下使用一個外掛所佔的資源。

架設網站的程序真的太多了,不見得每個管理員都會選WordPress,畢竟還要考慮使用習慣、用途。問題是很多架站程序都沒有像WordPress擁有這種自動備份資料庫的外掛來讓管理員使用。這麼一來,管理員就要每天到網站後台系統的phpMyAdmin去手動備份,只要一天沒備份到就會多一分的危險,所以手動備份不僅很累人也不是明智的選擇。

談到cPanel空間的好處真的是說不完,除了擁有一般架站需要的功能外,還附加許多貼心的小功能如:郵件、流量報表、備份精靈、安全防護……等,而這次我們就是要寫一個腳本,利用cPanel空間才有的「Cron Jobs」來排定執行時間,只要設定時間一到空間就會自動執行腳本--備份資料庫→把資料庫壓縮成壓縮檔→把壓縮檔寄到指定的信箱。這樣不費一絲力氣也能輕輕鬆鬆備份資料庫,多棒啊~!

第一步:開啟FTP傳輸軟體(FileZilla),登入空間後在「/」底下建立backup」資料夾。【備1】

[教學]Cpanel空間定時自動備份資料庫並寄至信箱-新增backup資料夾

第二步:開啟編輯軟體(Notepad++),將下面腳本語法複製到文件裡。

cd /home/使用者帳號/backup #切換到工作目錄
stamp=`date +%y%m%d` #獲得當前時間
mysqldump -u資料庫使用者名稱 -p資料庫密碼 資料庫名稱 >  db_backup_$stamp.sql #導出數據庫
bzip2 -z -9 -f db_backup_$stamp.sql #壓縮數據庫
mutt 電子信箱 -a db_backup_$stamp.sql.bz2 -s "database backup" #郵件發送
rm db_backup_$stamp.sql.bz2 #移除臨時文件

[教學]Cpanel空間定時自動備份資料庫並寄至信箱-新增dbbackup.sh

第三步:將語法的中文改成你自己的資料,並儲存成「dbbackup.sh」。【備2】

  • 使用者帳號:如下圖中的goodman
  • 資料庫使用者名稱:如下圖中的goodman_wordpress
  • 資料庫密碼:如下圖中的test123
  • 資料庫名稱:如下圖中的goodman_blog
  • 電子信箱:如下圖中的fff222lf2@gmail.com

[教學]Cpanel空間定時自動備份資料庫並寄至信箱-編輯dbbackup.sh及儲存

第四步:將剛編輯好的「dbbackup.sh」上傳至剛剛建立的「backup」資料夾裡面,

[教學]Cpanel空間定時自動備份資料庫並寄至信箱-上傳dbbackup.sh

第五步將剛剛上傳的「dbbackup.sh」設定權限755

[教學]Cpanel空間定時自動備份資料庫並寄至信箱-設權限755

第六步:進入cP後台,把右方卷軸拉到最下面,點選「Cron jobs」。

[教學]Cpanel空間定時自動備份資料庫並寄至信箱-進入cron jobs

第七步:點選「Standard」,直接進入「Cron jobs」的操作畫面。【備3】

[教學]Cpanel空間定時自動備份資料庫並寄至信箱-選standard

第八步:選擇執行腳本的時間、填入腳本的位置後,點選「Add New Cron Job」。【備4】

  • Minute:分鐘,一般建議選擇「:00 top of the hour(0)」(整點)。
  • Hour:小時,一般建議選擇「11:00 p.m. (23)」(晚上11點)。
  • Day:第幾天,一般建議選擇「Every day」。
  • Month:第幾月,一般建議選擇「Every month」。
  • Weekday:星期幾,一般建議選擇「Every weekday」。
  • Command to run:腳本的位置,填入「/home/使用者帳號/backup/dbbackup.sh」。

[教學]Cpanel空間定時自動備份資料庫並寄至信箱-打入相關訊息

第九步:接著就等你指定的時間到後就可以收到備份信件了。【備5】

[教學]Cpanel空間定時自動備份資料庫並寄至信箱-收信

【備1】為什麼是在「/」底下建立資料夾

:因為我們要存放的腳本內有你的資料庫帳號、密碼,從你登入空間所看到的第一層目錄就是「/」,一般是最不容易被破解的。而一般我們所稱的根目錄「/public_html」就是在它的底下。

【備2】檔案名稱可以自己亂取嗎

:基本上是可以的,但是副檔名記得一定要是「.sh」,且第八部腳本位置的那裏也要做更改。

【備3】為什麼我沒有出現這一步,而是直接跳第八部呢

:如果你的面板是x3的通常都會沒有;而使用rvskin通常都有這步。

【備4】上面有個框框要填EMAIL,那需要填嗎

:可填可不填,那最主要就是告訴你腳本的運作狀況。如果一直沒收到備份信件建議你填一下,它會寄信告訴你腳本哪裡出錯已導致無法運作。

【備5】為什麼收到信件的時間會和我填的不一樣

:有兩種可能。

  • 信件延遲
  • 主機在國外,所以會有時差的問題

本文作者: 有殺氣追殺你

個人介紹 | 查看其他文章

臉書留言()
一般留言(20)
  • 20
    vp

    請問如果虛擬主機不支援寄信的話(要付費..),可以備份在主機裡嗎?

    殺氣說:
    用外掛備份不就好了

  • /home/保密XD/backup/dbbackup.sh: line 5: mutt: command not found

    我寄過來這封信如上

    該如何修正解決呢??謝謝

    殺氣說:
    代表主機沒有安裝mutt
    可以換使用這個語法看看

  • 18
    malu

    你好~~
    請問可以設定成不要壓縮~但是自動分券嗎~~
    因為空間不支援超過2000k的檔案
    備份了~~卻不能還原
    感謝喔

    殺氣說:
    應該是可以,但我能力不足
    其實你能備份就好了,因為還是有辦法解決

    用這個去分割你的SQL檔吧
    http://shachi.tw/segmentation-huge-sql/

  • 謝謝殺氣的教學,好用心唷,已經設定!

    也謝謝你這次幫我個大忙!謝謝!

    殺氣說:
    不會

  • 16
    Sonic

    可是她連信都沒有回..

    我是使用GMAIL…

    信箱也使用正確~

    殺氣說:
    那可能要詢問一下主機商了
    有的主機是不支持寄信的

    另外也要考慮到時差的問題,主機和台灣時間會有時差,因此設定時要特別注意

  • 15
    Sonic

    我設定好以後沒有寄到信箱欸…..

    請問這是什麼回事?

    殺氣說:
    麻煩先啟用寄信告知的功能(備4),再把信中錯誤訊息貼上來
    不然我怎麼會知道你發生了什麼事呢?

  • Warning: mysqldump: Option ‘–set-variable’ is deprecated. Use –variable-name=value instead.
    這是什麼?
    有收到備份,但上面是什麼東西?

    殺氣說:
    不知道,沒遇過

  • 不好意思,第三次來請教殺氣^^"

    我有開啟 email 錯誤通知,如果是

    /home/abcde/backup/db_a_backup.sh: line 1: cd: command not found
    mysqldump: Got error: 1045: Access denied for user ‘abcde’@'localhost’ (using password: YES) when trying to connect
    /home/abcde/backup/db_b_backup.sh: line 9: mutt: command not found

    keyword: command no found

    是不是主機不支援呢?

    殺氣說:
    不清楚,你是用哪家主機阿
    1.腳本是否有設定成權限755
    2.你的資料庫似乎沒有權限喔
    3.有可能你的主機一樣沒有mutt模組

  • 我這樣設定

    cd /home/abcdefg/backup
    #切換到工作目錄

    stamp=`date +%y%m%d`
    #獲得當前時間

    mysqldump -uabcdefg -p1234567 abcdefg_dz > db_backup_a_$stamp.sql
    #導出數據庫

    bzip2 -z -9 -f db_backup_a_$stamp.sql
    #壓縮數據庫

    mutt abcdefg@gmail.com -a db_backup_a_$stamp.sql.bz2 -s "database backup"
    #郵件發送

    rm db_backup_a_$stamp.sql.bz2
    #移除臨時文件

    排程測試每一分鐘備份一次,但怎麼會沒收到郵件..
    有那裡設定錯誤嗎檔案名稱是:db_a_backup.sh

    還請殺氣幫忙看看 :)

    殺氣說:
    應該是沒有錯,這還蠻複雜的
    1.可能是你的腳本位置填錯
    2.可能是你的腳本內的資料庫資料可能有錯
    3.可能是你主機…
    總之先啟用備4裡說的信箱功能
    看看系統寄給你的腳本運作情況怎樣才能判斷

  • 恩恩,我試看看哦~
    我原本是把兩個程式碼設定不同名稱,重複寫在同一個腳本,不過似乎無法成功。

    殺氣說:
    估計不能這樣寫,分成兩個腳本比較好

發表留言