linux 异地备份(ftp)
创建脚本/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 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 user $ftpuser $ftppw bin mput *$(date +%Y%m%d)*.tgz bye END Mysql的备份,如果凌晨可以停止几分钟,那么强烈建议对Mysql执行物理备份,脚本如下#!/bin/bash #History #===================================================== #When Who What #2010/3/24 Zhaoyn Create # #===================================================== basedir=/opt/backup updir=$basedir/updir timenow=$(date +%Y%m%d-%H%M) # 删除mysql十四天前的数据,注意,这里仅删除了mysql的tgz文件。
rm -f `find $basedir -name "mysql*.tgz" -mtime +14` # 由于数据库在有连接的情况下,直接对数据文件打包是可能出问题的,所以这里我们在打包前要停用数据库,这样直接对数据文件打包,恢复时只需解压数据文件到新环境相应的目录即可,默认是/var/lib/mysql# 如果白天也要进行数据库备份,请使用mysqldump命令,进行在线备份。
恢复也挺方便的。
/etc/rc.d/init.d/mysqld stop sleep 5s ;sync;sync tar -czpf $basedir/mysql.$timenow.tgz /var/lib/mysql /etc/rc.d/init.d/mysqld start#===================================================== 附件中的脚本文件是有DOS换行符(CR/LF)的,复制文件中的内容到SSH客户端没有问题,如果直接拷贝文件到Linux系统中,可先运行下面的命令:mv *.txt *sh dos2unix *.sh
转载请注明出处51数据库 » linux异地文件同步软件