一.背景
1.总会出出现环境上的数据丢失,在没有备份的情况下会非常的被动,不管是由于病毒还是人为的原因造成的程序、数据被删除,有时候后悔已经来不及,不如提前做到数据的备份,而异地备份也更加的保险一点。
2.数据备份的意义就在于,当受到网络攻击、入侵、电源故障或者操作失误等事故的发生后,可以完整、快速、简捷、可靠地恢复原有系统,在一定的范围内保障系统的正常运行。
二.依赖功能介绍
1.expect
作用:expect工具是一个根据脚本与其他交互式程序进行交互
安装语句:yum install expect
参考文档:Linux之expect操作详解
2.cron
作用:可以根据配置文件约定的时间来执行特定的任务
参考文档:
Linux Crontab 定时任务
cron表达式
3.liunx的三个时间atime,mtime,ctime
作用:定期删除备份时一般备份文件的mtime来进行删除
参考文档:详解Linux中atime,mtime,ctime的使用场景
三.本地备份脚本
1.本地备份命令测试
1
2
mkdir
-p
/root/backup/
`
date
"+%Y-%m-%d"
`
tar
-zcvPf
/root/backup/
`
date
"+%Y-%m-%d"
`
/test20221009
.
tar
.gz
/root/test20221009
2.封装shell脚本:compress_backup.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash
source_folder=
/root/test20221009
backup_folder=
/root/backup/
`
date
"+%Y-%m-%d"
`
source_folder_name=`
echo
$source_folder |
awk
-F
"/"
'{print $3}'
`.
tar
.gz
echo
"source_folder:$source_folder"
echo
"backup_folder: $backup_folder"
echo
"source_folder_name: $source_folder_name"
#新建立文件夹
mkdir
-p
/root/backup/
`
date
"+%Y-%m-%d"
`
#压缩命令
tar
-zcvPf $backup_folder/$source_folder_name $source_folder
echo
"$source_folder_name文件备份成功"
3.加入crond定时任务并将输出与错误重定向至文件
编辑添加crond定时任务列表
设置每天00:00执行一次备份任务,并将标准输出与标准错误重定向至日志文件
1
0 0 * * * sh
/root/backup/compress_backup
.sh 2>&1 >
/root/backup/log_
$(
date
+\%Y-\%m-\%d)
测试查看任务执行情况:
查看备份文件与本地日志正确生成
四.异地备份脚本
1.异地备份命令测试:
1
scp
-C -r
/root/backup/2022-10-10/
mrswhite@192.168.37.9:
/root/back_up_offsite
提示输入密码后进行备份
查看对端文件备份成功
2.封装expect脚本offsite_backup.expect,当提示输入密码时可自动对应输入密码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/usr/bin/expect -f
# 获取当前日期 例如:2022-10-12
set
date
[ clock
format
[ clock seconds ] -
format
"%Y-%m-%d"
]
# 传输用户名
set
username mrswhite
# 对端hostIP地址
set
host 192.168.37.9
# 密码
set
password test20221012
#设置本地传输路径-前缀
set
source_folder
/root/backup
#设置兑换传输路径
set
backup_folder
/root/back_up_offsite
# expect默认timeout为30S 超过30s未传输完会停止,设置为 -1 则不限制超时时间
set
timeout -1
# 压缩 递归 本地绝对路径 用户名 目标IP 目标路径
spawn
/usr/bin/scp
-C -r $source_folder/$
date
/ $username@$host:$backup_folder
expect {
"*yes/no"
{send
"yes\r"
;exp_continue}
"*password:"
{send
"$password\r"
}
}
expect eof
运行后查询结果,已实现了无人值守备份的功能
查看异地文件已生成:
3.加入crond定时任务并将输出与错误重定向至文件
设置每天02:00执行一次异地备份任务,(给本地备份充足的时间预留)并将标准输出与标准错误重定向至日志文件
1
0 1 * * * expect
/root/backup/offsite_backup
.expect 2>&1 >
/root/backup/offsite_log_
$(
date
+\%Y-\%m-\%d)
修改系统时间,重启crond服务等待定时任务的执行,并查询日志:
1
2
3
date
-s
"2022-10-10 00:59:50"
service crond restart
tail
-5
/var/log/cron
检查异地文件备份成功:
五.定期删除备份
1.定期删除命令测试:
1
find
/root/backup/
-mtime +180 |
xargs
rm
-rf {}
#删除180天前的文件与文件夹的信息
2.封装shell脚本delete_expire_backupfile.sh,清理的目录与过期时间可配置
1
2
3
4
5
6
7
8
9
10
#!/bin/bash
#待清除目录
dir
=
/root/backup/
#文件的过期周期
day_expireDay=10
#删除最终为day_expireDay前的备份文件与文件夹信息
find
$
dir
-mtime +$day_expireDay |
xargs
rm
-rf {}
echo
"$dir下的$day_expireDay天前的文件清理成功"
查看文件清理效果如下:
3.加入crond定时任务并将输出与错误重定向至文件
设置每天00:00执行一次异地备份任务,并将标准输出与标准错误重定向至日志文件
1
0 0 * * * sh
/root/backup/delete_expire_backupfile
.sh 2>&1 >
/root/backup/delete_log__
$(
date
+\%Y-\%m-\%d)
修改系统时间,重启crond服务等待定时任务的执行,并查询日志,文件已清理成功
1
2
3
date
-s
"2022-10-12 23:59:50"
service crond restart
tail
-5
/var/log/cron