<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Latest posts for the topic "[Linux]如何定時自動備份網站及資料庫到遠端伺服器"]]></title>
		<link>https://forum.andowson.com/posts/list/16.page</link>
		<description><![CDATA[Latest messages posted in the topic "[Linux]如何定時自動備份網站及資料庫到遠端伺服器"]]></description>
		<generator>JForum - http://www.jforum.net</generator>
			<item>
				<title>[Linux]如何定時自動備份網站及資料庫到遠端伺服器</title>
				<description><![CDATA[ 要讓網站不因為機器硬體故障或人為操作錯誤而造成損失，備份是需要的。雖然我們可以將整個硬碟備份並燒成光碟，但是每天燒一片也等於每天製造一片垃圾（如果網站都一直沒事的話）。故我們可以採用將重要資料備份到硬碟的作法，如果一段時間沒用上，我們可以將最舊的備份資料刪除掉，這樣就不怕資料庫掛了或人為錯誤了。不過存放在本地端硬碟也有個風險，就是一旦硬碟掛了，就什麼都沒有了。比較保險一點的作法是同時也上傳一份檔案到遠端伺服器去，同時可以每個月或每季再燒錄一片光碟以縮短真正需要復原時的下載時間。 
<br>
<br>
由於很多檔案只要知道名字透過網路都可以找到，這些可以不用去備份它，來縮小備份檔的大小，加快檔案上傳到遠端伺服器。故我們需要的是找出真正需要備份的資料檔或設定檔。以我的例子來說，當初規劃的目標是安裝一部主機可以達到下列功能 
<br>
 a. Internet connection(ADSL) 
<br>
 b. Dynamic IP DNS Mapping(no-ip) 
<br>
 c. SSH Server 
<br>
 d. FTP Server 
<br>
 e. DNS Server 
<br>
 f. Mail Server(Postfix + POP3/IMAP + Anti-Spam + Virus Scan) 
<br>
 g. Web Server(Apache + Tomcat + SSL) 
<br>
 h. Database Server(PostgreSQL) 
<br>
 i. Traffic monitor(SNMP, MRTG, AWstats) 
<br>
 j. Firewall(Auto-block) 
<br>
故當我要備份時便要找到它們相關的設定檔，我把它們的內容列在backup.ini內，大致如下： 
<br>
[code=plain]/etc/awstats/* 
<br>
/etc/cron.hourly/split-vhost.sh 
<br>
/etc/httpd/conf/httpd.conf 
<br>
/etc/httpd/conf/workers.properties 
<br>
/etc/httpd/conf/ssl.crt/server.crt 
<br>
/etc/httpd/conf/ssl.key/server.key 
<br>
/etc/httpd/conf.d/*.conf 
<br>
/etc/mrtg/mrtg.cfg 
<br>
/etc/mrtg/mrtg.cpu 
<br>
/etc/mrtg/mrtg.ram 
<br>
/etc/postfix/access 
<br>
/etc/postfix/*.cf 
<br>
/etc/rc.d/init.d/noip 
<br>
/etc/rc.d/init.d/tomcat 
<br>
/etc/ssh/sshd_config 
<br>
/etc/sysconfig/i18n 
<br>
/etc/vsftpd/vsftpd.conf 
<br>
/etc/yum.repos.d/CentOS-Base.repo 
<br>
/etc/aliases 
<br>
/etc/amavisd.conf 
<br>
/etc/crontab 
<br>
/etc/dovecot.conf 
<br>
/etc/f-prot.conf 
<br>
/etc/fstab 
<br>
/etc/group 
<br>
/etc/hosts 
<br>
/etc/hosts.allow 
<br>
/etc/hosts.deny 
<br>
/etc/named.conf 
<br>
/etc/passwd 
<br>
/etc/php.ini 
<br>
/etc/resolv.conf 
<br>
/etc/vsftpd.chroot_list 
<br>
/etc/vsftpd.ftpusers 
<br>
/etc/vsftpd.user_list 
<br>
/root/admin/* 
<br>
/root/newsite/* 
<br>
/root/setup/*.sh 
<br>
/root/setup/*/*.sh 
<br>
/usr/bin/split-vhost.pl 
<br>
/usr/lib/sasl2/smtpd.conf 
<br>
/var/lib/pgsql/data/*.conf 
<br>
/var/lib/awstats/* 
<br>
/var/lib/webalizer/* 
<br>
/var/named/chroot/var/named/named.* 
<br>
/var/robust/worker1/conf/server.header 
<br>
/var/robust/worker1/conf/server.host 
<br>
/var/robust/worker1/conf/server.footer 
<br>
/var/robust/worker1/conf/server.xml 
<br>
/var/robust/worker1/conf/tomcat-users.xml 
<br>
/var/robust/worker1/conf/Catalina/* 
<br>
/var/robust/worker2/conf/server.header 
<br>
/var/tomcat5/bin/setenv.sh 
<br>
/var/tomcat5/common/classes/* 
<br>
/var/tomcat5/common/endorsed/jarlist.txt 
<br>
/var/tomcat5/common/lib/jarlist.txt 
<br>
/var/www/mrtg/*.png 
<br>
/var/www/mrtg/*.old 
<br>
/var/www/mrtg/*.log 
<br>
/var/www/mrtg/cpu.html 
<br>
/var/www/mrtg/ram.html 
<br>
/var/www/mrtg/net.html 
<br>
/var/www/mrtg/index.html 
<br>
/var/www/usage/*[/code] 
<br>
/root/目錄下是我自己管理用的一些shell script，它們也一併備份起來。 
<br>
接下來，我的網站安裝了兩套JForum來跑兩個網站，由於JForum可以由網路上下載得到，故我只需要備份無法從網路上下載得到的部分即可在需要復原網站時派上用場。另外，我自己開發了一些程式，我也一併整理進來，我把這個清單檔案命名為webapp.ini，內容大致如下： 
<br>
[code]/home/andowson/www/*.* 
<br>
/home/andowson/www/images/*.gif 
<br>
/home/andowson/www/images/avatar/* 
<br>
/home/andowson/www/templates/default/*.htm 
<br>
/home/andowson/www/templates/default/styles/zh_*.css 
<br>
/home/andowson/www/upload/* 
<br>
/home/andowson/www/WEB-INF/*.xml 
<br>
/home/andowson/www/WEB-INF/config/*.* 
<br>
/home/andowson/www/WEB-INF/config/database/generic/* 
<br>
/home/andowson/www/WEB-INF/config/database/postgresql/* 
<br>
/home/andowson/www/WEB-INF/config/languages/zh_*.properties 
<br>
/home/andowson/www/aquamp/* 
<br>
/home/30elite/www/*.* 
<br>
/home/30elite/www/images/*.gif 
<br>
/home/30elite/www/images/avatar/* 
<br>
/home/30elite/www/templates/tp101/*.htm 
<br>
/home/30elite/www/templates/tp101/styles/zh_*.css 
<br>
/home/30elite/www/upload/* 
<br>
/home/30elite/www/WEB-INF/*.xml 
<br>
/home/30elite/www/WEB-INF/config/*.* 
<br>
/home/30elite/www/WEB-INF/config/database/generic/* 
<br>
/home/30elite/www/WEB-INF/config/database/postgresql/* 
<br>
/home/30elite/www/WEB-INF/config/languages/zh_*.properties[/code] 
<br>
好了，檔案的部分就差不多這樣子。別忘了，還有資料庫要備份，由於先前我還安裝了olat，故在資料庫上多了一個olat資料庫要備份，這段我把它通通整理到/root/admin/backup.sh裡面去，先把資料庫名稱存到陣列DBNAME去，透過迴圈的方式，透過pg_dump指令將資料庫備份到檔案，再將備份好的資料庫加到到db.tar去，最後再一次gzip起來。 
<br>
由於這個backup.sh程式我可以設定為每天執行一次，故我想連系統狀態一併作個檢查，順便產生一個網頁檔好了，於是我又弄了一個backup.html的樣版檔，內容大致如下： 
<br>
[code=html] 
<br>
&lt;html&gt; 
<br>
&lt;head&gt; 
<br>
&lt;title&gt;[ hostname ] 每日檢查報表&lt;/title&gt; 
<br>
&lt;/head&gt; 
<br>
&lt;body&gt; 
<br>
&lt;center&gt; 
<br>
&lt;h2&gt;[ hostname ] 每日檢查報表&lt;/h2&gt; 
<br>
&lt;/center&gt; 
<br>
&lt;div align="left"&gt; 
<br>
 &lt;table&gt; 
<br>
 &lt;tr&gt; 
<br>
 &lt;td&gt;主機名稱:&lt;/td&gt; 
<br>
 &lt;td&gt;hostname&lt;/td&gt; 
<br>
 &lt;/tr&gt; 
<br>
 &lt;tr&gt; 
<br>
 &lt;td&gt;主機IP:&lt;/td&gt; 
<br>
 &lt;td&gt;ip&lt;/td&gt; 
<br>
 &lt;/tr&gt; 
<br>
 &lt;tr&gt; 
<br>
 &lt;td&gt;作業系統:&lt;/td&gt; 
<br>
 &lt;td&gt;os_version&lt;/td&gt; 
<br>
 &lt;/tr&gt; 
<br>
 &lt;tr&gt; 
<br>
 &lt;td&gt;Maintainer:&lt;/td&gt; 
<br>
 &lt;td&gt;webmaster@hostname&lt;/td&gt; 
<br>
 &lt;/tr&gt; 
<br>
 &lt;tr&gt; 
<br>
 &lt;td&gt;CPU型號:&lt;/td&gt; 
<br>
 &lt;td&gt;cpumodel&lt;/td&gt; 
<br>
 &lt;/tr&gt; 
<br>
 &lt;tr&gt; 
<br>
 &lt;td&gt;快取記憶體大小:&lt;/td&gt; 
<br>
 &lt;td&gt;cachesize&lt;/td&gt; 
<br>
 &lt;/tr&gt; 
<br>
 &lt;tr&gt; 
<br>
 &lt;td&gt;實體記憶體大小:&lt;/td&gt; 
<br>
 &lt;td&gt;memsize MB&lt;/td&gt; 
<br>
 &lt;/tr&gt; 
<br>
 &lt;tr&gt; 
<br>
 &lt;td&gt;虛擬記憶體大小:&lt;/td&gt; 
<br>
 &lt;td&gt;swapsize MB&lt;/td&gt; 
<br>
 &lt;/tr&gt; 
<br>
 &lt;tr&gt; 
<br>
 &lt;td&gt;已開機時間:&lt;/td&gt; 
<br>
 &lt;td&gt;UPtime&lt;/td&gt; 
<br>
 &lt;/tr&gt; 
<br>
 &lt;tr&gt; 
<br>
 &lt;td&gt;備份時間:&lt;/td&gt; 
<br>
 &lt;td&gt;backtime&lt;/td&gt; 
<br>
 &lt;/tr&gt; 
<br>
 &lt;/table&gt; 
<br>
&lt;/div&gt; 
<br>
&lt;table&gt; 
<br>
 &lt;tr&gt; 
<br>
 &lt;td&gt;Log Type&lt;/td&gt; 
<br>
 &lt;td&gt;File Name&lt;/td&gt; 
<br>
 &lt;td&gt;Size&lt;/td&gt; 
<br>
 &lt;/tr&gt; 
<br>
 &lt;tr&gt; 
<br>
 &lt;td&gt;Apache LOG&lt;/td&gt; 
<br>
 &lt;td&gt;/var/log/httpd/access_log&lt;/td&gt; 
<br>
 &lt;td&gt;httpd_log_size MB&lt;/td&gt; 
<br>
 &lt;/tr&gt; 
<br>
 &lt;tr&gt; 
<br>
 &lt;td&gt;Tomcat LOG&lt;/td&gt; 
<br>
 &lt;td&gt;/var/robust/worker1/logs/catalina.out&lt;/td&gt; 
<br>
 &lt;td&gt;tomcat_log_size MB&lt;/td&gt; 
<br>
 &lt;/tr&gt; 
<br>
 &lt;tr&gt; 
<br>
 &lt;td&gt;Login LOG&lt;/td&gt; 
<br>
 &lt;td&gt;/var/log/lastlog&lt;/td&gt; 
<br>
 &lt;td&gt;lastlog_size MB&lt;/td&gt; 
<br>
 &lt;/tr&gt; 
<br>
 &lt;tr&gt; 
<br>
 &lt;td&gt;Sendmail LOG&lt;/td&gt; 
<br>
 &lt;td&gt;/var/log/maillog&lt;/td&gt; 
<br>
 &lt;td&gt;maillog_size byte(s)&lt;/td&gt; 
<br>
 &lt;/tr&gt; 
<br>
 &lt;tr&gt; 
<br>
 &lt;td&gt;System LOG&lt;/td&gt; 
<br>
 &lt;td&gt;/var/log/messages&lt;/td&gt; 
<br>
 &lt;td&gt;messages_size byte(s)&lt;/td&gt; 
<br>
 &lt;/tr&gt; 
<br>
&lt;/table&gt; 
<br>
&lt;p&gt;&lt;/p&gt; 
<br>
&lt;table&gt; 
<br>
 &lt;!-- MSTableType="layout" --&gt; 
<br>
 &lt;tr&gt; 
<br>
 &lt;td&gt;IP&lt;/td&gt; 
<br>
 &lt;td&gt;&lt;a href="http://ip/mrtg/cpu.html"&gt;CPU Loading(%)&lt;/a&gt;&lt;/td&gt; 
<br>
 &lt;td&gt;&lt;a href="http://ip/mrtg/ram.html"&gt;RAM Usage(%)&lt;/a&gt;&lt;/td&gt; 
<br>
 &lt;td&gt;HD Usage(%)&lt;/td&gt; 
<br>
 &lt;td&gt;&lt;a href="http://ip/mrtg/ip_2.html"&gt;Bandwidth&lt;/a&gt;&lt;/td&gt; 
<br>
 &lt;/tr&gt; 
<br>
 &lt;tr&gt; 
<br>
 &lt;td&gt;ip&lt;/td&gt; 
<br>
 &lt;td&gt;使用者: cpuusr%&lt;p&gt;系統: cpusys%&lt;/td&gt; 
<br>
 &lt;td&gt;實體: memused%&lt;p&gt;虛擬: swapused%&lt;/td&gt; 
<br>
 &lt;td&gt;[/code] 
<br>
透過sed指令將一些變數取代掉。最後將這個網頁傳到遠端的網頁主機並發一封通知信，這樣就不會忘記每天去看一下狀態了。 
<br>
詳細的backup.sh如下： 
<br>
[code]#! /bin/bash 
<br>
# Name: Backup and System Health Check Report 
<br>
# Author: Andowson Chang (andowson [at] gmail [dot] com) 
<br>
# Version: 1.2 
<br>
# First Released: 2005/11/09 
<br>
# Last Modified: 2007/06/24 
<br>
<br>
# Modify the following line for your environment 
<br>
ADMIN_PATH=/root/admin 
<br>
BACKUP_FILE_PATH=/home/andowson/backup 
<br>
DBNAME=( forum elite olat ) 
<br>
MAILTO=someone@andowson.com 
<br>
NOTICE=${BACKUP_FILE_PATH}/notice.html 
<br>
REMOTE_WEB=remote.andowson.com 
<br>
<br>
ip=`/sbin/ifconfig eth0|grep "inet addr"|awk '{print $2}'|cut -d":" -f2` 
<br>
checkdate=`date +%Y%m%d` 
<br>
<br>
# Generate jarlist.txt for recover jar files 
<br>
cd /var/tomcat5/common/endorsed 
<br>
ls *.jar &gt; jarlist.txt 
<br>
cd /var/tomcat5/common/lib 
<br>
ls *.jar &gt; jarlist.txt 
<br>
<br>
# Backup system config files 
<br>
rm -rf ${BACKUP_FILE_PATH}/${ip}.tar.gz 
<br>
tar zcvf ${BACKUP_FILE_PATH}/${ip}.tar.gz `cat ${ADMIN_PATH}/backup.ini` 
<br>
<br>
# Backup web application files 
<br>
tar zcvf ${BACKUP_FILE_PATH}/webapp_${checkdate}.tar.gz `cat ${ADMIN_PATH}/webapp.ini` 
<br>
<br>
# Backup PostgreSQL databases 
<br>
for (( i = 0 ; i &lt; ${#DBNAME[@]} ; i++ )) 
<br>
do 
<br>
 su - postgres -c "pg_dump ${DBNAME[i]} &gt; /var/lib/pgsql/backups/${DBNAME[i]}_${checkdate}.bak" 
<br>
 tar rvf ${BACKUP_FILE_PATH}/db_${checkdate}.tar /var/lib/pgsql/backups/${DBNAME[i]}_${checkdate}.bak 
<br>
done 
<br>
gzip -f ${BACKUP_FILE_PATH}/db_${checkdate}.tar 
<br>
<br>
backuptime=`date "+%Y-%m-%d %T"` 
<br>
<br>
# Get system hardware information and status 
<br>
hostname=`/bin/hostname` 
<br>
os_version=`uname`" "`uname -r` 
<br>
cpumodel=`cat /proc/cpuinfo|grep "model name"|awk '{print $4" "$5" "$6" "$7}'|head -1` 
<br>
clock=`cat /proc/cpuinfo|grep "model name"|awk '{print $7}'|head -1` 
<br>
cachesize=`cat /proc/cpuinfo|grep "cache size"|awk '{print $4" "$5}'|head -1` 
<br>
mem=`cat /proc/meminfo|grep "MemTotal:"|awk '{print $2}'` 
<br>
swap=`cat /proc/meminfo|grep "SwapTotal:"|awk '{print $2}'` 
<br>
let MB=1024*1024 
<br>
let KB=1024 
<br>
let memsize=$mem/$KB 
<br>
let swapsize=$swap/$KB 
<br>
UPtime=`/usr/bin/uptime | awk '{print $3 " " $4 " " $5}' | cut -d"," -f1-2` 
<br>
<br>
cpuusage=`/usr/bin/sar -u 1 3 | grep Average | awk '{print $3 " " $5}'` 
<br>
cpuusr=`echo $cpuusage | cut -d" " -f1` 
<br>
cpusys=`echo $cpuusage | cut -d" " -f2` 
<br>
<br>
ramusage=`/usr/bin/sar -r 3 3 | grep Average | awk '{print $4 " " $9}'` 
<br>
memused=`echo $ramusage | cut -d" " -f1` 
<br>
swapused=`echo $ramusage | cut -d" " -f2` 
<br>
<br>
hdusage=`df -t ext3 -h|awk '{print $6"\t" $2"\t" $3"\t" $4"\t" $5}'` 
<br>
<br>
let lastlog_size=`/bin/ls -l /var/log/lastlog|awk '{print $5}'`/$MB 
<br>
let maillog_size=`/bin/ls -l /var/log/maillog|awk '{print $5}'` 
<br>
let messages_size=`/bin/ls -l /var/log/messages|awk '{print $5}'` 
<br>
let httpd_log_size=`/bin/ls -l /var/log/httpd/access_log|awk '{print $5}'`/$MB 
<br>
let tomcat_log_size=`/bin/ls -l /var/robust/worker1/logs/catalina.out|awk '{print $5}'`/$MB 
<br>
<br>
grep "b/秒" /var/www/mrtg/${ip}_2.html |awk '{print $2 $3}'|cut -d "&gt;" -f3|head -6 &gt; /tmp/mrtg.tmp 
<br>
maxin=`head -1 /tmp/mrtg.tmp` 
<br>
avgin=`tail -5 /tmp/mrtg.tmp|head -1` 
<br>
maxout=`tail -3 /tmp/mrtg.tmp|head -1` 
<br>
avgout=`tail -2 /tmp/mrtg.tmp|head -1` 
<br>
# Generate HTML report page 
<br>
sed -e "s/hostname/$hostname/g" -e "s/ip/$ip/g" -e "s/backtime/$backuptime/g" \ 
<br>
 -e "s/os_version/$os_version/g" -e "s/cpumodel/$cpumodel/g" \ 
<br>
 -e "s/cachesize/$cachesize/g" -e "s/memsize/$memsize/g" \ 
<br>
 -e "s/swapsize/$swapsize/g" -e "s/UPtime/$UPtime/g" \ 
<br>
 -e "s/lastlog_size/$lastlog_size/g" -e "s/maillog_size/$maillog_size/g" \ 
<br>
 -e "s/messages_size/$messages_size/g" -e "s/httpd_log_size/$httpd_log_size/g" \ 
<br>
 -e "s/tomcat_log_size/$tomcat_log_size/g" -e "s/cpuusr/$cpuusr/g" \ 
<br>
 -e "s/cpusys/$cpusys/g" -e "s/memused/$memused/g" \ 
<br>
 -e "s/swapused/$swapused/g" ${ADMIN_PATH}/backup.html &gt; ${BACKUP_FILE_PATH}/${ip}_${checkdate}.html 
<br>
echo "&lt;pre&gt;$hdusage&lt;/pre&gt;" &gt;&gt; ${BACKUP_FILE_PATH}/${ip}_${checkdate}.html 
<br>
echo "&lt;/td&gt; 
<br>
 &lt;td &gt;最大流入: ${maxin}&lt;br&gt;平均流入: ${avgin}&lt;br&gt;最大流出: ${maxout}&lt;br&gt;平均流出: ${avgout}&lt;/td&gt; 
<br>
 &lt;/tr&gt; 
<br>
&lt;/table&gt; 
<br>
&lt;/body&gt; 
<br>
<br>
&lt;/html&gt;" &gt;&gt; ${BACKUP_FILE_PATH}/${ip}_${checkdate}.html 
<br>
rm -rf /tmp/mrtg.tmp 
<br>
<br>
echo "&lt;html&gt; 
<br>
&lt;head&gt; 
<br>
&lt;title&gt;每日系統檢查表&lt;/title&gt; 
<br>
&lt;/head&gt; 
<br>
&lt;body&gt; 
<br>
&lt;ul&gt; 
<br>
&lt;li&gt;&lt;a &gt;${ip}&lt;/a&gt;&lt;/li&gt; 
<br>
&lt;/ul&gt; 
<br>
&lt;/body&gt; 
<br>
&lt;/html&gt;" &gt; ${BACKUP_FILE_PATH}/index.html 
<br>
<br>
# Upload to remote backup server 
<br>
cd ${BACKUP_FILE_PATH} 
<br>
# The disk space is limited, so we only keep the lastest version 
<br>
cp db_${checkdate}.tar.gz db.tar.gz 
<br>
cp webapp_${checkdate}.tar.gz webapp.tar.gz 
<br>
. ${ADMIN_PATH}/ftp.sh `cat ${ADMIN_PATH}/ftp.cfg` backup index.html 
<br>
. ${ADMIN_PATH}/ftp.sh `cat ${ADMIN_PATH}/ftp.cfg` backup ${ip}_${checkdate}.html 
<br>
. ${ADMIN_PATH}/ftp.sh `cat ${ADMIN_PATH}/ftp.cfg` backup db.tar.gz 
<br>
. ${ADMIN_PATH}/ftp.sh `cat ${ADMIN_PATH}/ftp.cfg` backup ${ip}.tar.gz 
<br>
. ${ADMIN_PATH}/ftp.sh `cat ${ADMIN_PATH}/ftp.cfg` backup webapp.tar.gz 
<br>
rm -rf db.tar.gz 
<br>
rm -rf webapp.tar.gz 
<br>
<br>
echo "http://${REMOTE_WEB}/backup/${ip}_${checkdate}.html" &gt; ${NOTICE} 
<br>
mail -s "${hostname} ${checkdate}的備份及系統檢查已完成" ${MAILTO} &lt; ${NOTICE} 
<br>
<br>
echo "Done!"[/code] 
<br>
對了，遠端伺服器的FTP設定我另外存到ftp.cfg去，格式如下： 
<br>
[code=plain]remotehost username password[/code] 
<br>
remotehost:請改成您的遠端主機IP(需有啟動FTP Server) 
<br>
username:請改成您的FTP帳號 
<br>
password:請改成您的FTP密碼 
<br>
注意您得在遠端的主機上先建立一個backup的目錄！ 
<br>
<br>
至於ftp.sh的內容則很簡單，如下： 
<br>
[code]#! /bin/bash 
<br>
/usr/bin/ftp -v -n &gt;&gt; /tmp/ftp.log &lt;&lt;EOD 
<br>
open $1 
<br>
user $2 $3 
<br>
bi 
<br>
prompt 
<br>
cd $4 
<br>
mput $5 
<br>
quit 
<br>
EOD[/code] 
<br>
執行後可以到/tmp下看ftp的log檔。 
<br>
<br>
最後，只要在/etc/crontab上加上定期自動執行backup.sh就完成了。 
<br>
[code=plain]# backup data and generate system report(2007.06.24) 
<br>
01 03 * * * root /root/admin/backup.sh &gt; /var/log/backup.log[/code] 
<br>
<br>
日後，如果有新安裝的程式或網站，只需要修改backup.ini或webapp.ini即可。 
<br>
<br>
使用方式： 
<br>
1.先將檔案下載存到/root/admin下，將backup.sh修改為可執行。 
<br>
2.建立一個備份用的本地端目錄，例如如/home/andowson/backup。 
<br>
3.在遠端伺服器上亦需建立一個backup資料夾。 
<br>
4.編輯backup.ini, webapp.ini及ftp.cfg, 修改backup.sh上面的一些參數。 
<br>
5.執行/root/admin/backup.sh &gt; backup.log，看是否正常，如果正常才進行下個步驟，否則應繼續進行步驟4。 
<br>
6.設定/etc/crontab 
<br>
<br>
參考資料： 
<br>
[url=http://linux.vbird.org/linux_basic/0240tarcompress.php#tar]鳥哥的 Linux 私房菜-檔案的壓縮與打包[/url]]]></description>
				<guid isPermaLink="true">https://forum.andowson.com/posts/preList/81/143.page</guid>
				<link>https://forum.andowson.com/posts/preList/81/143.page</link>
				<pubDate><![CDATA[Sun, 24 Jun 2007 20:02:06]]> GMT</pubDate>
				<author><![CDATA[ andowson]]></author>
			</item>
			<item>
				<title>回覆:[Linux]如何定時自動備份網站及資料庫到遠端伺服器</title>
				<description><![CDATA[ 今天發現一篇備份MySQL資料庫的英文資料，供大家參考啦！
<br>
[url=http://paulbradley.tv/38/]How to backup your MySQL tables and data every night using a bash script and cron[/url]]]></description>
				<guid isPermaLink="true">https://forum.andowson.com/posts/preList/81/156.page</guid>
				<link>https://forum.andowson.com/posts/preList/81/156.page</link>
				<pubDate><![CDATA[Fri, 6 Jul 2007 00:38:52]]> GMT</pubDate>
				<author><![CDATA[ andowson]]></author>
			</item>
			<item>
				<title>回覆:[Linux]如何定時自動備份網站及資料庫到遠端伺服器</title>
				<description><![CDATA[ backup.sh可以修改第11行來自動備份所有的PostgreSQL資料庫（除了postgres, template0, template1外） 
<br>
[code=bash;first-line:11] 
<br>
DBNAME=( `psql -l -U postgres | awk '{print $1}' | sed -e "1,3d"|grep -v ":"|grep -v "("|grep -v "template"|grep -v "postgres"` ) 
<br>
[/code] 
<br>]]></description>
				<guid isPermaLink="true">https://forum.andowson.com/posts/preList/81/274.page</guid>
				<link>https://forum.andowson.com/posts/preList/81/274.page</link>
				<pubDate><![CDATA[Fri, 12 Oct 2007 13:41:03]]> GMT</pubDate>
				<author><![CDATA[ andowson]]></author>
			</item>
			<item>
				<title>回覆:[Linux]如何定時自動備份網站及資料庫到遠端伺服器</title>
				<description><![CDATA[ backup.sh每天會產生四種備份檔在本機硬碟上，檔名如下： 
<br>
webapp_${checkdate}.tar.gz 
<br>
${DBNAME[i]}_${checkdate}.bak 
<br>
db_${checkdate}.tar.gz 
<br>
${ip}_${checkdate}.html 
<br>
<br>
時間久了也是會佔用很大的硬碟空間，所以我們需要定期去清理這些檔案，例如備份檔存放在/home/andowson/backup及/var/lib/pgsql/backups目錄下，我們只保留最近三十天的備份，則我們可以排定cron如下 
<br>
[code] 
<br>
44 04 1 * * root find /home/andowson/backup -name "*.tar.gz" -ctime +30 -type f -print0 | xargs -0 /bin/rm -f 
<br>
46 04 1 * * root find /home/andowson/backup -name "192.168.1.2*.html" -ctime +30 -type f -print0 | xargs -0 /bin/rm -f 
<br>
47 04 1 * * root find /var/lib/pgsql/backups -name "*.bak" -ctime +30 -type f -print0 | xargs -0 /bin/rm -f 
<br>
[/code] 
<br>]]></description>
				<guid isPermaLink="true">https://forum.andowson.com/posts/preList/81/416.page</guid>
				<link>https://forum.andowson.com/posts/preList/81/416.page</link>
				<pubDate><![CDATA[Mon, 28 Jul 2008 10:32:08]]> GMT</pubDate>
				<author><![CDATA[ andowson]]></author>
			</item>
			<item>
				<title>回覆:[Linux]如何定時自動備份網站及資料庫到遠端伺服器</title>
				<description><![CDATA[ 請問ftp.cfg這個檔案要放在哪裏？]]></description>
				<guid isPermaLink="true">https://forum.andowson.com/posts/preList/81/896.page</guid>
				<link>https://forum.andowson.com/posts/preList/81/896.page</link>
				<pubDate><![CDATA[Thu, 2 Sep 2010 22:29:05]]> GMT</pubDate>
				<author><![CDATA[ yuhfa2002]]></author>
			</item>
			<item>
				<title>回覆:[Linux]如何定時自動備份網站及資料庫到遠端伺服器</title>
				<description><![CDATA[ yuhfa2002您好： 
<br>
預設ftp.cfg是放在/root/admin目錄下，跟其他檔案放在一起。 
<br>
您可以在backup.sh的113行看到下面的指令 
<br>
[code=bash;first-line:113]. ${ADMIN_PATH}/ftp.sh `cat ${ADMIN_PATH}/ftp.cfg` backup index.html[/code] 
<br>
而ADMIN_PATH的設定值是在backup.sh的第9行： 
<br>
[code=bash;first-line:9]ADMIN_PATH=/root/admin 
<br>
[/code] 
<br>
如果您想要放到不同的目錄，可以修改ADMIN_PATH的值即可。]]></description>
				<guid isPermaLink="true">https://forum.andowson.com/posts/preList/81/897.page</guid>
				<link>https://forum.andowson.com/posts/preList/81/897.page</link>
				<pubDate><![CDATA[Fri, 3 Sep 2010 14:47:42]]> GMT</pubDate>
				<author><![CDATA[ andowson]]></author>
			</item>
			<item>
				<title>[Linux]如何定時自動備份網站及資料庫到遠端伺服器</title>
				<description><![CDATA[ 首先感謝您對我上一個問題的詳細回覆： 
<br>
再者，要再請教你：請問若我的資料庫系統是mysql，則backup.sh，要怎麼更改？ 
<br>
而您在「使用方式」的第4點提到「.編輯backup.ini, webapp.ini及ftp.cfg, 修改backup.sh上面的一些參數。」其中的「 修改backup.sh上面的一些參數。」是要修改哪些「參數」？可否教導一下小弟，不好意思，因為小弟對於sh的語法不解，看到您這麼好的東西，想拿來運用，又怕設錯，只好一再打擾您！先謝謝了。]]></description>
				<guid isPermaLink="true">https://forum.andowson.com/posts/preList/81/900.page</guid>
				<link>https://forum.andowson.com/posts/preList/81/900.page</link>
				<pubDate><![CDATA[Sat, 25 Sep 2010 22:43:18]]> GMT</pubDate>
				<author><![CDATA[ yuhfa2002]]></author>
			</item>
			<item>
				<title>回覆:[Linux]如何定時自動備份網站及資料庫到遠端伺服器</title>
				<description><![CDATA[ yuhfa2002您好： 
<br>
感謝您的提問，讓我發現原來第二篇的MySQL備份英文資料已經消失了，我也沒有留下文章內容。所以我試著找一下MySQL官網的文件，發現有個mysqldump工具程式可以使用，請參考下面這幾個網址： 
<br>
http://dev.mysql.com/doc/refman/5.0/en/mysqldump-sql-format.html 
<br>
http://www.study-area.org/tips/mysql_backup.htm 
<br>
要修改backup.sh，可以試著修改第32-37行替換為下面這幾行： 
<br>
[code]# line 032-037 
<br>
# Backup MySQL databases 
<br>
mysqldump --all-databases &gt; /tmp/dump.sql 
<br>
tar rvf ${BACKUP_FILE_PATH}/db_${checkdate}.tar /tmp/dump.sql[/code] 
<br>
至於您問到的修改參數的部分，是指backup.sh的第8~14行，屬於我說明用的範例，請依您實際狀況修改，一般是修改備份的路徑、email和網站的網址。 
<br>
008 # Modify the following line for your environment 
<br>
009 ADMIN_PATH=/root/admin 
<br>
010 [color=red]BACKUP_FILE_PATH[/color]=/home/andowson/backup &lt;=改成您的使用者名稱 
<br>
011 [color=red]DBNAME[/color]=( forum elite olat )&lt;=改成您的資料庫名稱 
<br>
012 [color=red]MAILTO[/color]=someone@andowson.com &lt;= 改成您的email信箱 
<br>
013 NOTICE=${BACKUP_FILE_PATH}/notice.html 
<br>
014 [color=red]REMOTE_WEB[/color]=remote.andowson.com &lt;= 改成您遠端的Web Server的網址或IP(有啟動FTP Server功能)]]></description>
				<guid isPermaLink="true">https://forum.andowson.com/posts/preList/81/901.page</guid>
				<link>https://forum.andowson.com/posts/preList/81/901.page</link>
				<pubDate><![CDATA[Mon, 27 Sep 2010 00:31:58]]> GMT</pubDate>
				<author><![CDATA[ andowson]]></author>
			</item>
			<item>
				<title>[Linux]如何定時自動備份網站及資料庫到遠端伺服器</title>
				<description><![CDATA[ 不知怎麼？我的ftp登入都失敗？我已照您指導的在ftp.cfg裡做好相關的設定了。
<br>
我看其/tmp/ftp.log檔顯示如下：
<br>
Remote system type is UNIX.
<br>
Using binary mode to transfer files.
<br>
331 Password required for xxxxxx
<br>
530 Login incorrect.
<br>
Login failed.
<br>
然而我在ssh底下試著打入ftp指令登入到遠端，打入同於ftp.cfg裡的帳號、密碼，都可以正常登入！
<br>
不知問題在哪？
<br>
還望不吝賜教，謝謝！
<br>]]></description>
				<guid isPermaLink="true">https://forum.andowson.com/posts/preList/81/1128.page</guid>
				<link>https://forum.andowson.com/posts/preList/81/1128.page</link>
				<pubDate><![CDATA[Fri, 12 Aug 2011 13:55:19]]> GMT</pubDate>
				<author><![CDATA[ yuhfa2002]]></author>
			</item>
			<item>
				<title>回覆:[Linux]如何定時自動備份網站及資料庫到遠端伺服器</title>
				<description><![CDATA[ yuhfa2002您好： 
<br>
請試著將ftp.sh取代為下列的檔案內容，並自行修改第2~6行的變數值，然後單獨執行ftp.sh看看是否可以正常運作，如果有問題再將ftp.log附上。 
<br>
[code]#! /bin/bash 
<br>
host=192.168.1.2 
<br>
username=xxx 
<br>
password=yyyyyyy 
<br>
dir=/tmp 
<br>
filename=test.txt 
<br>
echo "test" &gt; $filename 
<br>
/usr/bin/ftp -v -n &gt;&gt; /tmp/ftp.log &lt;&lt;EOD 
<br>
echo $host 
<br>
open $host 
<br>
echo $username 
<br>
echo $password 
<br>
user $username $password 
<br>
bi 
<br>
prompt 
<br>
echo $dir 
<br>
cd $dir 
<br>
echo $filename 
<br>
mput $filename 
<br>
quit 
<br>
EOD[/code]]]></description>
				<guid isPermaLink="true">https://forum.andowson.com/posts/preList/81/1129.page</guid>
				<link>https://forum.andowson.com/posts/preList/81/1129.page</link>
				<pubDate><![CDATA[Fri, 12 Aug 2011 15:57:40]]> GMT</pubDate>
				<author><![CDATA[ andowson]]></author>
			</item>
			<item>
				<title>回覆:[Linux]如何定時自動備份網站及資料庫到遠端伺服器</title>
				<description><![CDATA[ 謝謝你的回覆，我試了，仍無法登入 
<br>
ftp.log檔內容如下： 
<br>
?Invalid command 
<br>
?Invalid command 
<br>
?Invalid command 
<br>
?Invalid command 
<br>
?Invalid command 
<br>
331 Password required for xxxxxx 
<br>
530 Login incorrect. 
<br>
Login failed. 
<br>
?Invalid command 
<br>
?Invalid command 
<br>
?Invalid command 
<br>
?Invalid command 
<br>
?Invalid command 
<br>
?Invalid command 
<br>
?Invalid command 
<br>
530 Please login with USER and PASS 
<br>
?Invalid command 
<br>
?Invalid command 
<br>
?Invalid command 
<br>
mput test.txt^M^M? 530 Please login with USER and PASS 
<br>
Passive mode refused. 
<br>
?Invalid command 
<br>
?Invalid command 
<br>
221 Goodbye. 
<br>]]></description>
				<guid isPermaLink="true">https://forum.andowson.com/posts/preList/81/1131.page</guid>
				<link>https://forum.andowson.com/posts/preList/81/1131.page</link>
				<pubDate><![CDATA[Fri, 12 Aug 2011 16:45:34]]> GMT</pubDate>
				<author><![CDATA[ yuhfa2002]]></author>
			</item>
			<item>
				<title>回覆:[Linux]如何定時自動備份網站及資料庫到遠端伺服器</title>
				<description><![CDATA[ yuhfa2002您好：
<br>
抱歉，在ftp指令模式裡面不支援echo指令，所以應該要將所有的echo刪除：
<br>
[code]#! /bin/bash
<br>
host=ftp.server.ip
<br>
username=ftpuser
<br>
password=ftppwd
<br>
dir=/
<br>
filename=test.txt
<br>
echo "test" &gt; $filename
<br>
/usr/bin/ftp -v -n &gt;&gt; /tmp/ftp.log &lt;&lt;EOD
<br>
open $host
<br>
user $username $password
<br>
passive
<br>
bi
<br>
prompt
<br>
cd $dir
<br>
mput $filename
<br>
quit
<br>
EOD[/code]
<br>
另外，在您將ftp.sh上傳到主機時，請先執行一下dos2unix ftp.sh，然後再執行：
<br>
chmod 755 ftp.sh
<br>
./ftp.sh
<br>
<br>
注意，為便於除錯，建議每次執行ftp.sh前先刪除或清空/tmp/ftp.log]]></description>
				<guid isPermaLink="true">https://forum.andowson.com/posts/preList/81/1132.page</guid>
				<link>https://forum.andowson.com/posts/preList/81/1132.page</link>
				<pubDate><![CDATA[Fri, 12 Aug 2011 18:16:20]]> GMT</pubDate>
				<author><![CDATA[ andowson]]></author>
			</item>
			<item>
				<title>回覆:[Linux]如何定時自動備份網站及資料庫到遠端伺服器</title>
				<description><![CDATA[ 已可登入，但ftp.log卻出現： 
<br>
<br>
Passive mode off. 
<br>
200 Type set to I 
<br>
Interactive mode off. 
<br>
250 CWD command successful 
<br>
local: test.txt remote: test.txt 
<br>
200 PORT command successful 
<br>
550 test.txt: No such file or directory 
<br>
221 Goodbye. 
<br>
<br>
是不是因為ftp.sh裡的 
<br>
dir=/ 
<br>
filename=test.txt 
<br>
這兩行的設定要改？若是的話，請問要改為什麼？謝謝！ 
<br>
不好意思，一直打優！ 
<br>]]></description>
				<guid isPermaLink="true">https://forum.andowson.com/posts/preList/81/1133.page</guid>
				<link>https://forum.andowson.com/posts/preList/81/1133.page</link>
				<pubDate><![CDATA[Fri, 12 Aug 2011 19:13:59]]> GMT</pubDate>
				<author><![CDATA[ yuhfa2002]]></author>
			</item>
			<item>
				<title>回覆:[Linux]如何定時自動備份網站及資料庫到遠端伺服器</title>
				<description><![CDATA[ yuhfa2002您好： 
<br>
請先確認一下在您的ftp.sh目錄下，執行完./ftp.sh後有沒有產生一個test.txt檔案。 
<br>
如果沒有請自行手動建立一個，然後再執行一次./ftp.sh。]]></description>
				<guid isPermaLink="true">https://forum.andowson.com/posts/preList/81/1134.page</guid>
				<link>https://forum.andowson.com/posts/preList/81/1134.page</link>
				<pubDate><![CDATA[Sun, 14 Aug 2011 22:13:10]]> GMT</pubDate>
				<author><![CDATA[ andowson]]></author>
			</item>
	</channel>
</rss>