• 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

     

    三.本地备份脚本
    1.本地备份命令测试

    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 "+%Y-%m-%d"`
    #压缩命令
    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

     

    六.github脚本地址:

    https://github.com/bigwhite2020/bigwhite2022/tree/main/本地备份、异地备份、删除备份脚本

  • 相关阅读:
    Rust 基础
    k8s网络插件之Calico
    写年度总结报告的注意事项
    [运维|系统] go程序设置开机启动踩坑笔记
    【资损】资损防控的系统规范-渠道网关类设计
    基于深度学习的Deepfake检测综述
    分数限制下,选好专业还是选好学校?
    Dubbo服务如何优雅的校验参数
    【Docker】学习笔记(一)
    UE5 各种moveto
  • 原文地址:https://www.cnblogs.com/mrwhite2020/p/16769781.html