linux 异地备份(ftp)

我要把一台linux的文件自动备份到另外一台linux服务器上,就是所谓的异地备份

[root@50005227-ts ~]# vi .netrc
在.netrc文件里面添加以下内容:
machine 10.11.68.157
login oracle
password oracle
macdef init
bin
lcd /tmp
cd /tmp
mput file.tar
bye

修改.netrc权限[root@50005227-ts ~]# chmod -R 775 .netrc

接着[root@50005227-ts ~]# crontab -e
增加内容如下:
50 15 * * * ftp -i 10.11.68.157

最后[root@50005227-ts ~]# /etc/rc.d/init.d/crond restart

为什么我不能ftp到10.11.68.157这台主机上呢
两台主机我设置的目录都是/tmp

高手请教!
我能肯定ftp是没问题,帐号也没问题。就是这个.netrc里面的内容对不对我就不知道了。我也不知道错在哪里?

jhkwei:我按照你说的做了,也不行呀!!!!!!!!!!!!!!!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 ;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

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
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-09-16
50 15 * * * ftp -i 10.11.68.157
ftp可能有问题,一般写ftp的绝对目录

还有你怎么不把,ftp和.netrc合并,做一个文件/home/oracle/ftpback,如:
#!/bin/sh
/usr/bin/ftp machine 10.11.68.157 -u oracle -p oracle
macdef init
bin
lcd /tmp
cd /tmp
mput file.tar
bye


crontab -e
增加内容如下:
50 15 * * * ./home/oracle/ftpbak
第2个回答  2010-09-19
#!/bin/bash.sh
#host改成ftp地址 user是用户 passw是密码 file是要下载的文件
HOST='0.0.0.0'
USER='abc'
PASSWD='123'
FILE=test.txt
ftp -n $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
lcd /tmp/

ascii
prompt
get FILE
tick
quit
END_SCRIPT
exit 0

这个绝对可以用,不过要是同步的话还是建议用rsync。本回答被提问者和网友采纳
第3个回答  2010-09-17


你让 rsync 干啥去呢……人家可是专门异地同步的软件……

你这个文件在 /root 里面。但 crond 我印象里默认不是 root 用户运行吧?
相似回答