linux定时备份文件到其他服务器
描述:每天定时凌晨1点,在A服务器把项目文件、数据库文件打压缩包,传输到B服务器。
注意:需要root登录服务器,否则可能出现权限等错误
一、编写命令文件
1. 创建backup.sh文件,内容如下
#/bin/bash
#声明zt,变量值为昨天
zt=`date -d "yesterday" +%Y%m%d`
echo $zt
#复制myfiles下的文件到/backup/$zt/file
cp -r /myfiles /backup/$zt/file
#全量导出数据库文件到/backup/$zt(下边命令是DM的导出方式,不同数据库的命令也不同)
cd /home/dmdbms/bin
./dexp userid=SYSDBA/SYSDBA:5236 DIRECTORY=/backup/$zt file=mscode_full.dmp log=mscode_full.log full=y
#把文件夹打包
tar -zcPvf /backup/$zt.tar.gz /backup/$zt
#删除临时文件内容
#rm -rf /backup/$zt
#删除改文件夹下超过30天的文件
#find ./ -mtime +30 -name "*.tar.gz" -exec rm -rf {} ;
#删除2天以后的数据
#find /app/backup/ -type f -mtime +2 -exec rm {} \;
#sshpass 方式登录B服务器并传输
#sshpass -p "123456" scp /backup/333.txt root@192.168.1.110:/data/backup/
#expect方式登录192.168.1.110(B)服务器并传输压缩包到data下,root为B登录账号
expect <<EOF
spawn scp -r /backup/$zt.tar.gz root@192.168.1.110:/data/
expect "*password:"
send "123456\r"
expect eof
EOF
注意密码后有 \r
scp:传输方式,还有很多种,可以自行查询
sshpass:免手动输密码(明文)
expect:免手动输密码(隐藏)
2. 以上为.sh文件,编辑好后放到A服务器/backup下,手动执行测试
sh /backup/backup.sh
如果提示expect不是命令或expect相关的信息,执行下方任一条命令安装即可
#安装
apt -y install expect
#安装
yum –y intall expect
3. 运行完毕后,登录B服务器查看文件是否存在,存在则测试成功。
二、执行定时计划
#查看计划列表
crontab -l
#添加计划
crontab -e
#每天1点执行一次
0 1 * * * sh /backup/backup.sh
#每30分钟执行一次
#*/30 * * * * sh /backup/backup.sh
输入完后Ctrl+C,在输入 :wq 退出(注意冒号)
#重启计划
systemctl restart crond.service
#查看计划状态
systemctl status crond.service
corn的5位占位符分别为:分 时 日 月 星期。