linux 异地备份(ftp)

linux 异地备份(ftp),第1张

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

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 syncsync

done

ftp -v -n -i $ftpip <<END

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 syncsync

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

只要在这个备份脚本下增加一个异地传输功能即可。假定异地服务器建立一个Ftp服务器。

则在本地Mysql备份脚本中将现有的文件打包,或者放置一个独立目录,然后上传到Ftp服务器即可。其他部分补齐即可。

ftp -n <<!

open $Dest_Server

user $FtpUserName $FtpPassword 

binary

prompt off

cd /backpath

lcd /tmp

put "*.tar.gz"

bye

!

1.Linux下目录复制:本机->远程服务器scp -r /home/shaoxiaohu/test1 zhidao@192.168.0.1:/home/test2 #test1为源目录,test2为目标目录,zhidao@192.168.0.1为远程服务器的用户名和ip地址。2.Linux下目录复制:远程服务器->本机scp -r zhidao@192.168.0.1:/home/test2 /home/shaoxiaohu/test1#zhidao@192.168.0.1为远程服务器的用户名和ip地址,test1为源目录,test2为目标目录。注:如果端口号有更改,需在scp 后输入:-P 端口号 (注意是大写,ssh的命令中 -p是小写)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9414236.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存