首页 > 其他分享 >liunx文件定期本地备份、异地备份、删除备份脚本

liunx文件定期本地备份、异地备份、删除备份脚本

时间:2022-10-13 00:23:23浏览次数:66  
标签:root 备份 source 异地 liunx folder backup expect

导航

一.背景
二.依赖功能介绍
三.本地备份脚本
四.异地备份脚本
五.定期删除备份
六.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/ [email protected]:/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/本地备份、异地备份、删除备份脚本

标签:root,备份,source,异地,liunx,folder,backup,expect
From: https://www.cnblogs.com/mrwhite2020/p/16769781.html

相关文章

  • 【Vegas改编】SQL2005设置维护计划进行数据库每日备份
    例:每天1次完全备份,周日凌晨4点。超过4周清空之前的备份。 1,启用维护计划任务。在“管理”->“维护计划”上右键弹出菜单,选“维护计划向导”。​​​​ 2、“下一步”,设置......
  • 【Vegas改编】RMAN Catalog建立、备份及还原实施
    --TargetDBORACLE_SID=oralinCATALOGDBORACLE_SID=oratest******************************************************************1.CreatecatalogDBandregister......
  • SqlServer2008R2自动删除备份
    https://blog.51cto.com/u_15162069/2776830首先我们打开SqlServer管理工具(SSMS),在左侧目录中找到管理-->右键维护计划-->新建维护计划       双击左侧下......
  • 数据库的备份和还原
    1.命令行: *语法: *备份:mysqldump-u用户名-p密码数据库名称>保存的路径 *还原: 1.登录数据库 2.创建数据库 ......
  • Oracle19c-Linux下自动备份
    1、system用户登录plsql,创建备份文件路径createdirectorybackdiras'/data/u01/backup';--修改目录createorreplacedirectorybackdiras'/data/u01/backup'--删......
  • Oracle19c-- linux下备份还原
    1、查询当前所有dmp导入/导出目录select*fromDBA_DIRECTORIES;2、创建文件夹mkdir/data/u01/dmpdata3、文件夹创建后给oracle用户授权chown-Roracle......
  • 数据库的备份和还原
    数据库的备份和还原1.命令行语法:备份:mysqldump -u用户名-p密码>保存的路径还原:1.登录数据库2.创建数据库......
  • postgresql 备份和恢复
    备份pg_dump-ddbname--format=c-h172.20.1.1-p5432-Uodoo>/tmp/bak.dump.$(date+'%Y%m%d')恢复指定参数-C,会自动帮你创建数据库,恢复的数据库名称没法......
  • MySQL主从复制-利用冷备份搭建从库
    1、启动从库,目录文件配置路径:basedir=/u01/mysql/basedatadir=/u01/mysql/datatmpdir=/u01/mysql/tmp2、将冷备份data目录复制到新实例下的,datadir$lltotal20drwxr......
  • MongoDB 数据导入和导出、备份和恢复
    注:mongoexport和mongoimport针对库中的表,用于数据导入和导出,mongodump和mongorestore针对于库,用于备份和恢复。一、mongodb导出1、导出/导入数据时,连接mongodb服务器参数......