使用Cron Jobs定期備份資料庫與檔案至FTP

在部落格系統還在使用Lifetype的時候,就養成了至少每個月月初完整備份一次系統的習慣,雖然偶爾會忘記,但多少都還有備份,但,其實這也不是一個好習慣,而且其實備份這件事情應該要可以交由系統,讓自動的為您做好備份。

後來在轉換到Wordpress之後,便開始使用Wordpress的WP-DB-BackupWordPress Backup兩個Plug in來協助我備份資料庫與檔案動作,在資料量還小的時候,其實都還蠻好用的,而且可以透過wordpress自動幫忙作每日的備份,並且寄送到指定的信箱,也算是解決了備份的大問題。

直到今天,在確認備份專用信箱的時候,突然發現已經接連兩個禮拜沒收到備份檔案了,一查才知道,由於WP-DB-Backup這隻Plugin在製作壓縮檔的時候,超過了記憶體的可使用量,所以無法完成壓縮,程式發生錯誤,而畢竟目前所使用的還是Hosting,無法自由的調整PHP使用記憶體,所以備份的這件事情,勢必要在另外找尋出路。

後來發現目前使用的Hosting已經可以在cPanel上設定Cron Jobs,所以開始找關於使用Cron Jobs的方案,找到了Using a Cron job to keep things safe利用cPanel Cron jobs定时备份和优化网站程序以及数据以及[教學]cPanel空間定時自動備份空間檔案並寄至信箱等三篇,確定了一些不太熟悉的指令與使用,於是開始為自己客製化。

在使用的時候發現我的Hosting上無法使用mutt來寄送夾帶檔案的郵件,而此時又找不到其他解決方案,所以腦袋也就動到如果改用FTP似乎就可以解決了,所以整個大改寫了關於備份檔案與備份資料庫的BASH FILE。在這邊就跟大家分享這兩隻BASH FILE:

[資料庫備份的部份]

#BASH Setting
WORKDIR=/home/user/backup
BACKUPFILENAME=dbbackup_
FTPHOST=ftphostaddress
FTPUSER=user
FTPPASS=password
DBNAME=database_name
DBUSER=database_user
DBPASS=database_user_password
#Program
cd $WORKDIR
stamp=`date +%Y%m%d_%H%M` #time stamp , format 20110107_1256
mysqldump -u$DBUSER -p$DBPASS --default-character-set=utf8 $DBNAME > $BACKUPFILENAME$stamp.sql #dump sql file
#bp2 -z -f $BACKUPFILENAME_$stamp.sql #compress file ,bz2
gzip -v $BACKUPFILENAME$stamp.sql #compress file ,gz
ftp -inv $FTPHOST << EOF
user $FTPUSER $FTPPASS
cd /
binary
put $BACKUPFILENAME$stamp.sql.gz
bye
EOF
rm $BACKUPFILENAME$stamp.sql.gz #remove temp file

使用時,請記得將全型符號>及<<至換成半型符號

有需要的朋友,只要將上述的程式碼複製貼至文字編輯器(如Notepad++),並且依序設定工作目錄、檔案名稱、FTP帳號及資料庫帳號設定,而後儲存成*.sh,上傳至您的主機上,修改權限為可執行(ex. 755),並且設定好Corn Jobs就可以定期備份檔案了。(如何在Panel上設定Corn Jobs的其他細節可以參考「[教學]cPanel空間定時自動備份空間檔案並寄至信箱」)

在將原本的上傳至MAIL改至這個FTP的版本其實有碰到一些些小問題,一開始,先後試了幾次上傳壓縮檔到自己的主機,然後在從上傳的FTP主機下載下來的檔案一直都無法正常的解壓縮,比對主機上的File Size,才發現透過Cron Jobs上傳出來的檔案與在本機的檔案大小不同,才知道在上傳的過程中檔案出了問題,於是再次的細看手邊的FTP Client在傳輸檔案時都加上了「binary」指令,才想到可能是ftp傳輸時使用的ascii與binary的差異,於是也在FTP的指令中加上了binary,再試過也就順利的正常傳輸了。也就解決資料庫的備份問題。

值得一提的是,在linux上的壓縮格式,使用bzip2所產生的壓縮檔壓縮率會比使用gzip所做的壓縮檔壓縮率還高,以我目前資料庫的sql file大小大約在19MB來說,使用bzip壓縮可以壓縮到4MB以內,使用gzip則只可以壓縮到5MB,而我使用的原因則是因為,當發生意外真的需要用到備份檔案來還原時,gzip壓縮所產生的gz檔可以供我環境的phpmyadmin直接匯入使用,減少了一些步驟。當然,如果您比較在意壓縮率的話,也可以把這批次檔改變成使用bzip作壓縮。

[檔案備份部份]

#Setting
WORKDIR=/home/user/backup
BACKUPFILENAME=file_name_
TARGET=/home/user/public_html/blog
FTPHOST=ftphostaddress
FTPUSER=user
FTPPASS=password
#Program
cd $WORKDIR
stamp=`date +%Y%m%d_%H%M` #time stamp , format 20110107_1256
tar -cf $BACKUPFILENAME$stamp.tar $TARGET
bzip2 -z -f $BACKUPFILENAME$stamp.tar #compress file ,bz2
ftp -inv $FTPHOST << EOF
user $FTPUSER $FTPPASS
cd /
binary
put $BACKUPFILENAME$stamp.tar.bz2
bye
EOF
rm $BACKUPFILENAME$stamp.tar.bz2 #remove temp file

使用時,請記得將全型符號<<至換成半型符號

與備份資料庫一樣的,有需要的朋友可以將上面的程式碼複製到文字編輯器,設定工作目錄、備份檔案名稱、備份的目標資料夾以及FTP帳號後,上傳至您的主機並且修改權限為可執行後,設定Corn Jobs,就可以正常執行了。

如果這篇文章對您有所幫助,就幫我按個讚吧!



喜歡這篇文章就按個讚吧!

本篇發表於 IT資訊, Wordpress, 程式語言, 系統設定 並標籤為 , , , , , , 。將永久鏈結加入書籤。
透過Facebook發表迴響:

使用Cron Jobs定期備份資料庫與檔案至FTP 有 4 則回應

  1. 通告: 使用CronJob定期備份資料庫與檔案至DropBox | 墨嗓的資訊筆記

  2. VP 說道:

    請問ftphostaddress是打ip嗎?
    還是Domain網址?
    如果我IP是31.170.160.86
    那就直接打31.170.160.86就好了嗎?

  3. 高藥師 說道:

    請問這是上傳到本機的FTP,還是傳到別台的FTP呢

發表迴響