创建脚本/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