liunx文件定期本地备份、异地备份、删除备份脚本
导航
一. 背景
二. 依赖功能介绍
三. 本地备份脚本
四. 异地备份脚本
五. 定期删除备份
六.github 脚本地址
- - - - - - - - - - 分割线 - - - - - - - - - -
一. 背景
1. 总会出现环境上的数据丢失,在没有备份的情况下会非常的被动,不管是由于病毒还是人为的原因造成的程序、数据被删除,有时候后悔已经来不及,不如提前做到数据的备份,而异地备份也更加的保险一点。
2. 数据备份的意义就在于,当受到网络攻击、入侵、电源故障或者操作失误等事故的发生后,可以完整、快速、简捷、可靠地恢复原有系统,在一定的范围内保障系统的正常运行。
二. 依赖功能介绍
1.expect
作用:expect 工具是一个根据脚本与其他交互式程序进行交互
安装语句:yum install expect
参考文档:https://www.cnblogs.com/mrwhite2020/p/16769739.html
2.cron
作用:可以根据配置文件约定的时间来执行特定的任务
参考文档:
Linux Crontab 定时任务:https://www.cnblogs.com/mrwhite2020/p/15313228.html
cron 表达式:https://www.cnblogs.com/mrwhite2020/p/15195550.html
3.liunx 的三个时间 atime,mtime,ctime
作用: 定期删除备份时一般备份文件的 mtime 来进行删除
参考文档:https://www.cnblogs.com/mrwhite2020/p/16754506.html
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
#!/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 <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">+%Y-%m-%d</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
#压缩命令
tar -zcvPf $backup_folder/$source_folder_name $source_folder
echo "$source_folder_name 文件备份成功"
3. 加入 crond 定时任务并将输出与错误重定向至文件
编辑添加 crond 定时任务列表
crontab -e
设置每天 00:00 执行一次备份任务,并将标准输出与标准错误重定向至日志文件
0 0 * * * sh /root/backup/compress_backup.sh 2>&1 > /root/backup/log_$(date +\%Y-\%m-\%d)
测试查看任务执行情况:
tail -5 /var/log/cron
查看备份文件与本地日志正确生成
1. 异地备份命令测试:
scp -C -r /root/backup/2022-10-10/ mrswhite@192.168.37.9:/root/back_up_offsite
提示输入密码后进行备份
查看对端文件备份成功
2. 封装 expect 脚本 offsite_backup.expect,当提示输入密码时可自动对应输入密码
#!/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 定时任务并将输出与错误重定向至文件
crontab -e
设置每天 02:00 执行一次异地备份任务,(给本地备份充足的时间预留)并将标准输出与标准错误重定向至日志文件
0 1 * * * expect /root/backup/offsite_backup.expect 2>&1 > /root/backup/offsite_log_$(date +\%Y-\%m-\%d)
修改系统时间,重启 crond 服务等待定时任务的执行,并查询日志:
date -s "2022-10-10 00:59:50"
service crond restart
tail -5 /var/log/cron
检查异地文件备份成功:
1. 定期删除命令测试:
find /root/backup/ -mtime +180 | xargs rm -rf {} #删除 180 天前的文件与文件夹的信息
2. 封装 shell 脚本 delete_expire_backupfile.sh,清理的目录与过期时间可配置
#!/bin/bash
#待清除目录
dir=/root/backup/
#文件的过期周期
day_expireDay=10
#删除最终为 day_expireDay 前的备份文件与文件夹信息
find $dir -mtime +$day_expireDay | xargs rm -rf {}
echo "$dir 下的 $day_expireDay 天前的文件清理成功"
查看文件清理效果如下:
3. 加入 crond 定时任务并将输出与错误重定向至文件
crontab -e
设置每天 00:00 执行一次异地备份任务,并将标准输出与标准错误重定向至日志文件
0 0 * * * sh /root/backup/delete_expire_backupfile.sh 2>&1 > /root/backup/delete_log__$(date +\%Y-\%m-\%d)
修改系统时间,重启 crond 服务等待定时任务的执行,并查询日志,文件已清理成功
date -s "2022-10-12 23:59:50"
service crond restart
tail -5 /var/log/cron
https://github.com/bigwhite2020/bigwhite2022/tree/main/ 本地备份、异地备份、删除备份脚本