大纲:
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对接受发送的文件夹进行清理


完
网友评论