創建腳本/root/script/backup.sh
# 該腳本應用於10多臺普通的Linux應用服務器,多年來從未出過差錯。 # 數據庫備份較爲特殊,這裏不包含數據庫備份。 # 因爲腳本中含有FTP密碼,所以FTP僅給予寫權限較爲安全,FTP中的老備份的定期刪除任務由FTP服務器完成。 # 備份加入到自動任務中,每週六23:00執行,並寫入日誌,如下: # 追加下面語句到/etc/crontab中 # 0 23 * * 6 root /root/script/backup.sh >> /root/script/backup.log 2>&1 #有註釋版: #!/bin/bash #===================================================== #author zhaoyn #date 2010/12/31 #===================================================== #參數設定 basedir=/opt/backup #備份存放的目錄 days=15 #備份在本地保留天數 bakfiles="/root/script /etc" #需要備份的目錄或文件,請不要使用快捷方式或通配符 ftpip=XXX.XXX.XXX.XXX #異地備份的FTP地址 ftpuser='username' #異地備份的FTP用戶名 ftppw='password' #異地備份的FTP密碼 echo ===================================================== date cd $basedir #刪除備份目錄中15天以前備份文件,不包含子目錄 find -maxdepth 1 -name "*.tgz" -mtime +"$days" -exec rm -f {} \; for bakfile in $bakfiles do file=`basename $bakfile` #壓縮打包需要備份的目錄,包括權限,文件命名包含當前時間 tar -czpf "$file"_$(date +%Y%m%d-%H%M).tgz $bakfile #大文件打包前後,緩解磁盤壓力,降低I/O錯誤概率 sleep 10s ;sync;sync done #通過FTP上傳當天備份的文件到異地 ftp -v -n -i $ftpip <<END user $ftpuser $ftppw bin mput *$(date +%Y%m%d)*.tgz bye END
#無註釋版:
#!/bin/bash #===================================================== #author zhaoyn #date 2010/12/31 #===================================================== basedir=/opt/backup days=15 bakfiles="/root/script /etc" ftpip=XXX.XXX.XXX.XXX ftpuser='username' ftppw='password' echo ===================================================== date cd $basedir find -maxdepth 1 -name "*.tgz" -mtime +"$days" -exec rm -f {} \; for bakfile in $bakfiles do file=`basename $bakfile` tar -czpf "$file"_$(date +%Y%m%d-%H%M).tgz $bakfile sleep 10s ;sync;sync done ftp -v -n -i $ftpip <<END user $ftpuser $ftppw bin mput *$(date +%Y%m%d)*.tgz bye END
原文:http://www.zhaoyanan.cn/linux-local-and-remote-automatic-backup-solutions.html