Linux下超简单的Mysql自动备份+定期删除之前备份文件脚本

引言:

 前段时间闹得沸沸扬扬的“微盟”事件,让人们更加明白了数据安全的重要性。一个企业数据丢失会付出很大的代价,最坏的情况下,丢失数据可能会导致企业的崩溃。根据国家档案与记录管理局的研究显示,在没有很好的数据保护和恢复策略的公司中,80%的公司将在发生数据大灾难的两年内倒闭。为了避免上述情况发生,除了对员工的身份权限和数据业务访问权限管控外, 还要对数据安全管理机制全面加固与整改、加强运维平台治理、加强灾备体系的建设,从管理机制与基础设施建设两方面构筑安全防线,以杜绝此类事件再次发生。

脚本:

[root@localhost ~]# vim mysqlbackup.sh
#!/bin/bash
date=`date +%Y%m%d`
backuppath=/root/backup
dbhost=192.168.2.161
dbuser=root
dbpasswd=123456
db=test
if [ ! -d $backuppath ] ;then
 mkdir /root/backup && echo "备份目录创建成功!" 
else
 echo "备份目录已存在!"
fi
cd $backuppath
mkdir -p $date
cd $date
mysqldump  -h$dbhost -u$dbuser -p$dbpasswd $db > $date.sql
find $backuppath  -type d -mtime +7 -exec rm -rf {} \;

1.创建脚本变量

date=`date +%Y%m%d`
backuppath=/root/backup
dbhost=192.168.2.161
dbuser=root
dbpasswd=123456
db=test

注:
以下变量除date外,其他都是可以根据自身情况去修改的。

  • date=date +%Y%m%d //其中"date"与"+"之间必须有个空格,否则语法错误
  • backupath=/root/backup //创建备份文件目录
  • dbhost=192.168.2.161 //数据库主机IP
  • dbuser=root //数据库用户
  • dbpasswd=123456 //数据库密码
  • db=test //数据库库名

2.创建备份目录

if [ ! -d $backuppath ] ;then
 mkdir /root/backup && echo "备份目录创建成功!"
else
 echo "备份目录已存在!"
fi

 这里会判断备份目录是否存在,如果存在则输出“已存在”,不存在则创建。

3.创建当天备份目录

cd $backuppath
mkdir -p $date
cd $date

 切换到备份目录中,根据当前时间来创建一个目录,用于存放当天的备份文件,再切换至当天的备份目录中。

4.备份单个数据库

mysqldump  -h$dbhost -u$dbuser -p$dbpasswd $db > $date.sql

 目前脚本已经切换至当天的备份目录中,使用mysqldump对单个数据库进行备份,备份名为当天日期.sql。

5.定期删除备份文件

find $backuppath  -type d -mtime +7 -exec rm -rf {} \;

 只是一味地备份也不行,磁盘再大也有用完的那一天,况且很久以前的数据也没有任何意义,我们需要备份的是近期最新的数据,所以定期删除文件就很有必要了。

-type d          //表示查找目录,d表示目录
-mtime +7        //表示按照文件的更改时间来查找文件,+7表示距现在7天以前
-exec rm -rf {} \;    //exec后面跟要执行的shell命令,然后是{},一个空格,一个\,最后一个分号;

6.赋予脚本可执行权限

[root@localhost ~]# ll mysqlbackup.sh 
-rw-r--r-- 1 root root 425 3月  25 06:35 mysqlbackup.sh

[root@localhost ~]# chmod u+x mysqlbackup.sh

[root@localhost ~]# ll mysqlbackup.sh 
-rwxr--r-- 1 root root 425 3月  25 06:35 mysqlbackup.sh

7.创建周期性计划任务 -Crontab

Crontab格式
   *分 *时 *日 *月 *周 执行的命令
    第 1 列分钟 1~59,每分钟用 *或者*/1表示,整点分钟数为00或0
    第 2 列小时 1~23(0 表示 0 点)
    第 3 列日 1~31
    第 4 列月 1~12
    第 5 列星期 0~6(0 表示星期天)
    第 6 列要运行的命令
[root@localhost ~]# systemctl status crond
● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: active (running) since 一 2020-03-23 08:56:54 CST; 2 days ago
[root@localhost ~]# crontab -e
 0 21 * * * /root/mysqlbackup.sh     //每天22点执行备份脚本,可自行调整时间
[root@localhost ~]# systemctl restart crond   //重启crond服务

总结:

 以上脚本只是一个超简单简陋的版本,还有很多需要改进的地方,希望大家一起多多交流,一起进步。

发布了71 篇原创文章 · 获赞 12 · 访问量 8062

猜你喜欢

转载自blog.csdn.net/qq_44895681/article/details/105093493