liunx檔案定期本地備份、異地備份、刪除備份指令碼

2022-10-13 06:00:24

導航

一.背景
二.依賴功能介紹
三.本地備份指令碼
四.異地備份指令碼
五.定期刪除備份
六.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/本地備份、異地備份、刪除備份指令碼