1. 程式人生 > >Linux下自動備份資料庫和刪除歷史備份檔案

Linux下自動備份資料庫和刪除歷史備份檔案

一、Linux下自動備份資料庫

通常情況下,檔案備份大家喜歡名稱+備份日誌來命名備份檔案。下面以此為例說明:

(1)建立備份指令碼檔案,並編寫備份指令碼。

[root@test02 backup]# touch backup.sh  #建立指令碼檔案
[root@test02 backup]# chmod +x backup.sh  #給指令碼檔案賦予執行許可權
[root@test02 backup]# vi backup.sh 
#!/bin/sh

SYSTEM_TIME=`date '+%Y-%m-%d'`  #定義日期變數,取當前日期
mysqldump -h192.168.0.143 -P3306 -uroot -phht3306 --all-databases |gzip > /backup/backup$SYSTEM_TIME.sql.gz #先備份後打包

(2)crontab計劃任務在規定時間執行此備份指令碼

[root@test02 backup]# crontab -e  #進入計劃任務,crontab具體使用方法可以檢視語法
10 0 * * *    /bin/bash /backup/backup.sh  #每天凌晨10分執行此備份指令碼

二、刪除歷史備份檔案

       在每天備份的過程中,資料備份檔案會越來越多,會佔用更多的硬碟空間,而時間很長的資料備份檔案作用也不是很大,此時就存在怎麼讓系統每天自動刪除N天前的備份檔案的問題。

自動刪除指令碼可以跟自動備份指令碼存放在一個執行檔案中

if test -e /backup/
then
  find /backup/backup*.sql.gz  -mtime +3 -type f -exec rm -rf {} \;  #刪除三天之前的打包檔案
fi

附加:為了方便測試自動刪除N天前的備份檔案,用以下指令碼產生前33天備份檔案。

#/bin/sh
# 自動建立前33天備份檔案

for ((i=0;i<=33;i++))
do
date=`date -d -${i}day +%Y-%m-%d`
  if test -e "backup${date}.sql.gz"
  then
    echo "backup${date}.sql.gz已存在!"
  else
    touch /backup/backup${date}.sql.gz  #批量建立以日期命名檔案
    touch -d "${date}" /backup/backup${date}.sql.gz #批量修改以日期命名檔案的建立時間
  fi
done
-rw-r--r-- 1 root root       0 Jun  6 23:08 backup2018-06-06.sql.gz
-rw-r--r-- 1 root root       0 Jun  7 23:08 backup2018-06-07.sql.gz
-rw-r--r-- 1 root root       0 Jun  8 23:08 backup2018-06-08.sql.gz
-rw-r--r-- 1 root root       0 Jun  9 23:08 backup2018-06-09.sql.gz
-rw-r--r-- 1 root root       0 Jun 10 23:08 backup2018-06-10.sql.gz
-rw-r--r-- 1 root root       0 Jun 11 23:08 backup2018-06-11.sql.gz
-rw-r--r-- 1 root root       0 Jun 12 23:08 backup2018-06-12.sql.gz
-rw-r--r-- 1 root root       0 Jun 13 23:08 backup2018-06-13.sql.gz
-rw-r--r-- 1 root root       0 Jun 14 23:08 backup2018-06-14.sql.gz
-rw-r--r-- 1 root root       0 Jun 15 23:08 backup2018-06-15.sql.gz
-rw-r--r-- 1 root root       0 Jun 16 23:08 backup2018-06-16.sql.gz
-rw-r--r-- 1 root root       0 Jun 17 23:08 backup2018-06-17.sql.gz
-rw-r--r-- 1 root root       0 Jun 18 23:08 backup2018-06-18.sql.gz
-rw-r--r-- 1 root root       0 Jun 19 23:08 backup2018-06-19.sql.gz
-rw-r--r-- 1 root root       0 Jun 20 23:08 backup2018-06-20.sql.gz
-rw-r--r-- 1 root root       0 Jun 21 23:08 backup2018-06-21.sql.gz
-rw-r--r-- 1 root root       0 Jun 22 23:08 backup2018-06-22.sql.gz
-rw-r--r-- 1 root root       0 Jun 23 23:08 backup2018-06-23.sql.gz
-rw-r--r-- 1 root root       0 Jun 24 23:08 backup2018-06-24.sql.gz
-rw-r--r-- 1 root root       0 Jun 25 23:08 backup2018-06-25.sql.gz
-rw-r--r-- 1 root root       0 Jun 26 23:08 backup2018-06-26.sql.gz
-rw-r--r-- 1 root root       0 Jun 27 23:08 backup2018-06-27.sql.gz
-rw-r--r-- 1 root root       0 Jun 28 23:08 backup2018-06-28.sql.gz
-rw-r--r-- 1 root root       0 Jun 29 23:08 backup2018-06-29.sql.gz
-rw-r--r-- 1 root root       0 Jun 30 23:08 backup2018-06-30.sql.gz
-rw-r--r-- 1 root root       0 Jul  1 23:08 backup2018-07-01.sql.gz
-rw-r--r-- 1 root root       0 Jul  2 23:08 backup2018-07-02.sql.gz
-rw-r--r-- 1 root root       0 Jul  3 23:08 backup2018-07-03.sql.gz
-rw-r--r-- 1 root root       0 Jul  4 23:08 backup2018-07-04.sql.gz
-rw-r--r-- 1 root root       0 Jul  5 23:08 backup2018-07-05.sql.gz
-rw-r--r-- 1 root root 1470509 Jul  6 22:50 backup2018-07-06.sql.gz
-rw-r--r-- 1 root root 1470509 Jul  7 22:49 backup2018-07-07.sql.gz
-rw-r--r-- 1 root root 1470509 Jul  8 22:49 backup2018-07-08.sql.gz
-rw-r--r-- 1 root root 1470510 Jul  9 23:06 backup2018-07-09.sql.gz