一、前言
1、本文主要内容
- 实现数据库全量备份
- 实现定时执行备份
- 实现定时清理7天之前的备份
2、环境信息
工具 | 说明 |
---|---|
MySQL | 适用于 v5.x 及以上版本 |
mysqldump | MySQL自带的数据导出工具 |
crontab | 功能相当于Windows的任务计划工具 |
二、备份准备&备份测试
1、备份目录准备
# mysql专用目录
mkdir /mysql
# mysql备份目录
mkdir /mysql/backup
# mysql备份脚本
mkdir /mysql/backup/scripts
# mysql备份文件
mkdir /mysql/backup/files
# mysql备份日志
mkdir /mysql/backup/logs
2、备份账号准备
# 登录管理员账号
mysql -u root -p
# 创建本地使用backup账号
mysql> CREATE USER 'backup'@'localhost' IDENTIFIED BY 'backup';
# 授予备份所需权限
mysql> GRANT SELECT,RELOAD,PROCESS,EVENT ON *.* TO 'backup'@'localhost';
# 刷新权限
mysql> FLUSH PRIVILEGES;
# 查看授予权限
mysql> SHOW GRANTS FOR 'backup'@'localhost';
# 输出示例
+---------------------------------------------------------------------+
| Grants for backup@localhost |
+---------------------------------------------------------------------+
| GRANT SELECT, RELOAD, PROCESS, EVENT ON *.* TO `backup`@`localhost` |
+---------------------------------------------------------------------+
1 row in set (0.00 sec)
3、备份脚本准备
3.1、新建完整备份脚本
vi /mysql/backup/scripts/backup_full.sh
3.2、脚本内容
#!/bin/bash
#备份目录
BACKUP_ROOT=/mysql/backup
BACKUP_FILEDIR=$BACKUP_ROOT/files
BACKUP_LOGDIR=$BACKUP_ROOT/logs
#当前日期
DATE=$(date +%Y%m%d)
######备份######
#查询所有数据库
#-ubackup -pbackup表示使用backup账号执行命令,且backup账号的密码为:backup,通过grep -Ev可以排除无需备份的数据库
DATABASES=$(mysql -ubackup -pbackup -e "show databases" | grep -Ev "Database|sys|mysql|information_schema|performance_schema|ken.io")
echo $DATABASES
#循环数据库进行备份
for db in $DATABASES
do
echo
echo ----------$BACKUP_FILEDIR/${db}_$DATE.sql.gz BEGIN----------
mysqldump -ubackup -pbackup --default-character-set=utf8 -q --lock-all-tables --flush-logs -E -R --triggers -B ${db} | gzip > $BACKUP_FILEDIR/${db}_$DATE.sql.gz
echo ----------$BACKUP_FILEDIR/${db}_$DATE.sql.gz COMPLETE----------
echo
done
echo "done"
4、备份测试&验证
# 执行备份脚本
sh /mysql/backup/scripts/backup_full.sh
# 查看备份文件
ll /mysql/backup/files -h
# 解压指定文件({file}自己替换成备份的文件)
gunzip /mysql/backup/files/{file}
三、定时任务
1、安装crontab
yum install -y crontab
2、定时执行MySQL完整备份
# 添加定时任务
crontab -e
# 每天凌晨3点执行
00 3 * * * sh /mysql/backup/scripts/backup_full.sh
# 查看定时任务
crontab -l
3、定时清理7天以前的备份
3.1、创建文件清理脚本
# 创建脚本文件
vi /mysql/backup/scripts/backup_full_clean.sh
# 写入以下内容
#!/bin/bash
find /mysql/backup/files -mtime +7 -name "*.gz" -exec rm -rf {} \;
3.2、创建定时清理任务
# 添加定时任务
crontab -e
# 每天凌晨1点执行
00 1 * * * sh /mysql/backup/scripts/backup_full_clean.sh
# 查看定时任务
crontab -l
四、备注
1、crontab命令示例
命令 | 说明 |
---|---|
* * * * * command |
每1分钟执行一次command |
30 * * * * command |
每30分钟执行一次command |
3,59 * * * * myCommand |
每小时的第3和第59分钟执行 |
3,59 9-18 * * * myCommand |
在上午9点到18点的第3和第59分钟执行 |
3,59 9-18 */2 * * myCommand |
每隔两天的上午9点到18点的第3和第59分钟执行 |
3,59 9-18 * * 1 myCommand |
每周一上午9点到18点的第3和第59分钟执行 |