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


你可能感兴趣的:(Linux)