美文网首页互联网科技
linux下A服务器文件自动备份到B服务器(SCP+EXPECT

linux下A服务器文件自动备份到B服务器(SCP+EXPECT

作者: PM回忆录 | 来源:发表于2019-01-23 12:55 被阅读23次

大纲:

1.备份原理

2.expect安装和说明

3.具体代码

4.crontab定时运行脚本

1.备份原理

本人小白,复杂的shell不会写,所以只能利用几种简单的代码加上一定的逻辑,来实现服务器的文件备份。

A服务器对文件夹和数据库进行备份

A服务器通过scp命令进行发送备份

B服务器每天清理一次备份(为了节约空间)

B服务器每月1日进行备份的存储(在删除之前复制一份出来)

2.expect安装和说明

expect时用与提供自动交互的工具。比如如果想要用ssh登陆服务器,每次都输入密码你觉得麻烦,那你就可以使用expect来做自动交互,这样的话就不用每次都输入密码了。

本文利用expect来进行scp运行时的密码输入(使用密钥进行传输无需密码,也就无需expect,本文暂不涉及密钥)

yum install expect -y  #安装expect

#以下是expect的用法:

spawn 命令  #这个命令是你在linux命令行要执行的命令

expect "*password:" send "123\r"  #如果弹出*password,则自动输入123\r

expect eof  #结束expect匹配

3.具体代码

少废话,上代码:

A服务器:vim cpaliyun.sh (网站和数据库备份)

#!/bin/bash   
mysqldump -uroot -p数据库密码@ wordpress | gzip > /backup/aliyun/sql_pmhuiyilu_$(date +%Y%m%d_%H%M%S).sql.gz
zip -r /backup/aliyun/web_pmhuiyilu_$(date +%Y%m%d_%H%M%S).zip /web/pmhuiyilu/
workdir="/backup/aliyun/"
do_delete()
{
find $workdir -name '*.sql.gz' -and -mtime +1 -type f -delete
if [ $? -eq 0 ];then
echo $date delete $dir success!
else
echo $date delete $dir FAILD!
fi
find $workdir -name '*.zip' -and -mtime +1 -type f -delete
if [ $? -eq 0 ];then
echo $date delete $dir success!
else
echo $date delete $dir FAILD!
fi
}
do_delete

A服务器:vim scp.sh (利用scp进行文件夹的发送,第一次运行可能要输入yes/no,本脚本并未做处理,可手动运行一遍手动输入yes)

#!/usr/bin/env expect
/usr/bin/expect <<-EOF
set time 300
spawn scp -r /backup/aliyun/  root@B服务器IP:/home/pmhuiyilutoday
expect {
"root@B服务器IP's password:" { send "B服务器root密码\r" }
}
set timeout 5000
expect eof
EOF

B服务器:copy.sh

cp -rf /home/pmhuiyilutoday/* /home/pmhuiyilutomonth

B服务器:remove.sh

rm -rf /home/pmhuiyilutoday/*

4.crontab定时运行脚本

crontab -e  #打开crontab定时器(关于crontab之前有文章写过,可参考)

A服务器每天4点运行cpaliyun.sh脚本进行打包,每天4点10分运行scp.sh脚本进行发送

B服务器每个月1号6点运行copy脚本将备份复制一份出来,每天3点50对接受发送的文件夹进行清理

A服务器crontab B服务器crontab

相关文章

网友评论

    本文标题:linux下A服务器文件自动备份到B服务器(SCP+EXPECT

    本文链接:https://www.haomeiwen.com/subject/kdujjqtx.html