centos 7.9每天定期发送最新备份文件到另外一台服务器
1.需求
在本地化部署的过程中,为了使系统相对来说高可用,一般情况下,我们都会做一个负载,但是客户又会考虑成本,所以只有可怜巴巴的两台服务器,要全部服务都做负载,这个就实现不了。所以只能把两台服务器的环境都部署成一样,然后每天把数据库备份的数据同步一次到另外一台服务器上。
2.同步脚本
两个关键因素:最新的变量名,推送文件脚本。
同时这边分为两种方式登陆,一种是使用用户名和密码,另外一种是使用密钥登陆。
这里本地化部署,很多情况下都是使用用户名和密码登陆。
这里会使用一个工具,可以直接帮助我们输入密码,进行传输文件
centos 7.9 安装sshpass-博客
3.编写脚本
vi bf.sh
#!/bin/bash
echo ''
echo ' 每天凌晨03:00 自动备份传送数据 '
echo ''
# 设置环境变量
DATE=$(date +%Y%m%d)
echo '获取系统日期:' $DATE
/opt/sshpass-1.05/sshpass -p '12345678' scp /datadrive/DB/bak/mgcr_$DATE.sql.gz root@172.22.0.77:/datadrive/DB/bak/zfwbak
echo '备份完成'
赋予可执行文件:
chmod +x bf.sh
4.加入定时任务中,让其每天执行
crontab -e
00 3 * * * sh /datadrive/script/bf.sh &>/dev/null 2>&1
如果发生了错误,可以把日志输到特定的文件,进行查看。如下面命令:
00 3 * * * sh /datadrive/script/bf.sh &>/tmp/bf.log 2>&1
每天凌晨3点执行该脚本。
>/dev/null 2>&1 的意思:
标准输出重定向到空设备文件,也就是不输出任何信息到终端,标准错误输出重定向等同于标准输出,
因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。
如果命令执行比较频繁(如每分钟一次),或者命令输出内容较多,会使这个邮件文件不断追加内容,
文件越来越大。而邮件文件一般存放在根分区,根分区一般相对较小,所以会造成根分区写满而无法
登录服务器。
4.1.异常情况
注意:如果不把输出日志置空,就会调用邮件,这个时候就会报邮件的错误信息。
MAIL (mailed 68 bytes of output but got status 0x004b#012
4.2.sshpass报错Host key verification failed
解决方法: 由于该远程机器从未连接过,所以就会报这个错误,首次使用,需要手工连接一下。
ssh -p 22 -o StrictHostKeyChecking=no root@192.168.1.10
然后按提示,输入一下密码即可。