目前位置
[轉]使用Cron Jobs定期備份資料庫與檔案至FTP
作者:sLoB    發佈於:    文字:【】【】【
摘要:在部落格系統還在使用Lifetype的時候,就養成了至少每個月月初完整備份一次系統的習慣,雖然偶爾會忘記,但多少都還有備份,但,其實這也不是一個好習慣,而且其實備份這件事情應該要可以交由系統,讓自動的為您做好備份。

在部落格系統還在使用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,就可以正常執行了。


瀏覽 (3974) | 評論 (0) | 評分(0) | 支持(0) | 反對(0) | 發佈人:sLoB
將本文加入收藏夾
Search
美人時計
文章評論
最新評論
更多評論 發表評論
發表評論
您的評價
差(1) 一般(2) 好(3) 很好(4) 非常好(5)
評論標題
評論內容
驗 證 碼
看不清?更換一張
匿名發表 

© 2011 slobgame.net   website templates by styleshout      Powered by Wayhunt WebSite System 1.5