linux下同步数据脚本

因为公司担心服务器硬盘损坏导致数据丢失,但是公司规模又不是很大,在节约成本的前提下找了一台电脑用来做备份服务器。因为服务器不允许安装任何的软件,所有的操作只能2在备份服务器上,而且数据服务器上也没有nfs和samba。所以我写了一个脚本来实现数据的同步,使用计划任务来调用。

#!/bin/bashbr/>#Author:[email protected]
#自动备份数据到本地目录,并且生成日志文件,方便查看
ip='172.16.200.58'
#定义服务器ip地址
erlog='/var/log/backuperro.log'
#错误日志文件
oklog='/var/log/backup.log'
#正确日志文件
yu(){
expect << EOF
spawn ssh-copy-id -o StrictHostKeyChecking=no root@$ip
expect "password" { send "1234564\r" }
expect "#" { send "echo ok\n" }
EOF
}
#定义函数yu,自动发送公钥到服务器
timeout 10 ssh -o StrictHostKeyChecking=no root@$ip ls
#在远程主机上执行ls命令,如果需要手动输入密码就会等待,等待超过10秒结束这条语句
if [ $? -ne 0 ];then
#判断上一条语句是否执行不成功
rpm -q expect &> /dev/null
#检测expect是否安装
if [ $? -ne 0 ];then
yum list | grep expect &> /dev/null
#检测yum当中是否有expect
if [ $? -ne 0];then
echo "执行此操作需要安装expect,请手动安装expect或者手动将公钥发送到服务器。"
exit 5
fi
else
yum -y install expect
fi
if [ ! -f ~/.ssh/id_rsa ] ;then
#检测私钥是否不存在
ssh-keygen -q -f ~/.ssh/idrsa -N ''
#非交互式生成公钥和私钥到当前用户家目录下/.ssh/下
fi
yu &> /dev/null
#执行函数yu,并且把结果丢到黑洞
fi
ti=date +"%Y年%m月%d日 %H点%M分%S秒"
#获取当前的时间给变量赋值
#格式如: 2019年01月10日 14点19分11秒
[ id yuback ] || useradd -s /sbin/nologin yuback
#检测到没有用户,创建用户
for hlog in $erlog $oklog
do
[ ! -f "$hlog" ] && touch $hlog
#检测文件是否存在,不存在创建用户
ls -l $hlog | grep yuback &> /dev/null
#检测文件的属主和属组是否是yuback
[ $? -ne 0 ] && chown yuback:yuback $hlog
#如果不是就更改文件归属
done
scp -r root@$ip:/hana/backupset/HBP/ /filebackup/HANA/
#复制服务器/hana/backupset/HBP/目录下的文件到本地/filebackup/HANA/,递归复制
if [ $? -ne 0 ];then
#判断上面一条命令是否执行不成功
echo "${ti} 备份发生错误,请手动查看错误原因" >> $erlog
#将当前时间和后面的文字追加写入错误如日志 ,把这个文件定义为错误日志
exit 2
#直接退出不执行下面的所有操作,返回错误码为2
else
echo "${ti} 备份成功!" >> $oklog
#将当前时间和后面的文字追加写入正常日志 ,把这个文件定义为正确日志
fi
find /filebackup/HANA/QAS/ -type f -mtime +2 -exec rm -f {} \;
#查找/filebackup/HANA/QAS/目录下3天之前的类型为文件的,强制删除
if [ $? -eq 0 ];then
#判断上面一条命令是否执行成功
echo -e "${ti}\t备份成功!\t删除3天前备份成功!" >> $oklog
#将“删除3天前备份成功!”写到正常日志当中
##格式如: 2019年01月10日 14点19分11秒 删除3天前备份成功!
else
echo -e "${ti}\t备份成功!\t删除3天前备份失败!请手动查看文件信息。" >> $oklog
#将“删除3天前备份失败!请手动查看文件信息。” 写到正常日志当中
#格式如: 2019年01月10日 14点19分11秒 删除3天前备份失败!请手动查看文件信息。
fi
for rz in $oklog $erlog
do
logsize=$(ls -l $rz | awk '{print $5}')
if [ "$logsize" -ge 104857600 ];then
#如果文件大小大于等于100M
rq=`head -1 $rz | awk -F[\ 年月日] '{print $1$2$3}'
dq=$(date +'%Y%m%d')
dirnm=/var/log/$rq
$dq
#定义目录为/var/log/下以日志开头的第一行的年月日_当前年月日
if [ ! -d $dirnm ];then
mkdir $dirnm
chown yuback
#如果目录不存在,创建目录
fi
fi
mv $rz $dirnm
#移动日志到指定的目录
done

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章