引言:
前段时间闹得沸沸扬扬的“微盟”事件,让人们更加明白了数据安全的重要性。一个企业数据丢失会付出很大的代价,最坏的情况下,丢失数据可能会导致企业的崩溃。根据国家档案与记录管理局的研究显示,在没有很好的数据保护和恢复策略的公司中,80%的公司将在发生数据大灾难的两年内倒闭。为了避免上述情况发生,除了对员工的身份权限和数据业务访问权限管控外, 还要对数据安全管理机制全面加固与整改、加强运维平台治理、加强灾备体系的建设,从管理机制与基础设施建设两方面构筑安全防线,以杜绝此类事件再次发生。
脚本:
代码语言:javascript复制[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.创建脚本变量
代码语言:javascript复制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.创建备份目录
代码语言:javascript复制if [ ! -d $backuppath ] ;then
mkdir /root/backup && echo "备份目录创建成功!"
else
echo "备份目录已存在!"
fi
这里会判断备份目录是否存在,如果存在则输出“已存在”,不存在则创建。
3.创建当天备份目录
代码语言:javascript复制cd $backuppath
mkdir -p $date
cd $date
切换到备份目录中,根据当前时间来创建一个目录,用于存放当天的备份文件,再切换至当天的备份目录中。
4.备份单个数据库
代码语言:javascript复制mysqldump -h$dbhost -u$dbuser -p$dbpasswd $db > $date.sql
目前脚本已经切换至当天的备份目录中,使用mysqldump对单个数据库进行备份,备份名为当天日期.sql。
5.定期删除备份文件
代码语言:javascript复制find $backuppath -type d -mtime 7 -exec rm -rf {} ;
只是一味地备份也不行,磁盘再大也有用完的那一天,况且很久以前的数据也没有任何意义,我们需要备份的是近期最新的数据,所以定期删除文件就很有必要了。
代码语言:javascript复制-type d //表示查找目录,d表示目录
-mtime 7 //表示按照文件的更改时间来查找文件, 7表示距现在7天以前
-exec rm -rf {} ; //exec后面跟要执行的shell命令,然后是{},一个空格,一个,最后一个分号;
6.赋予脚本可执行权限
代码语言:javascript复制[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
代码语言:javascript复制Crontab格式
*分 *时 *日 *月 *周 执行的命令
第 1 列分钟 1~59,每分钟用 *或者*/1表示,整点分钟数为00或0
第 2 列小时 1~23(0 表示 0 点)
第 3 列日 1~31
第 4 列月 1~12
第 5 列星期 0~6(0 表示星期天)
第 6 列要运行的命令
代码语言:javascript复制[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服务
总结:
以上脚本只是一个超简单简陋的版本,还有很多需要改进的地方,希望大家一起多多交流,一起进步。