MySQL数据库自动备份及自动删除过期的备份文件

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: 脚本将实现MySQL数据库自动备份及自动删除过期的备份文件,这个脚本已经在生产环境中应用了(MySQL版本为8.0但5.7、5.6 也通用)

一、备份脚本说明

#!/bin/bash
DB_USER="xxx"
DB_PASS="xxx"
DB_NAME="xxx"
DAY=`date +%Y%m%d`
mysqldump -hlocalhost -u$DB_USER -p$DB_PASS $DB_NAME | gzip>/xxx/xxx/$DAY.sql.gz
find /xxx/xxx -name "*.sql.gz" -type f -mtime +3 -exec rm -rf {} \; > /dev/null 2>&1
#!/bin/bash      指此脚本使用/bin/bash来解释执行,#!是特殊的表示符,其后面根的是此解释此脚本的shell的路径                                                                   
DB_USER="xxx"    数据库账号(此帐号权限一定要足够)
DB_PASS="xxx"    数据库密码
DB_NAME="xxx"    要备份数据库的名称
DAY=`date +%Y%m%d`   获取Linux当前时间用作备份文件的名称,方便查找备份文件
mysqldump -hlocalhost -u$DB_USER -p$DB_PASS $DB_NAME | gzip>/xxx/xxx/$DAY.sql.gz  mysqldump是MySQL自带的逻辑备份工具(通过mysqldump 备份功能将备份数据通过道命令连接到压缩命令在(>)输出重定向到指定目录下的sql 文件并以日期命名和压缩打包sql文件节从而节省磁盘空间
find /xxx/xxx -name "*.sql.gz" -type f -mtime +3 -exec rm -rf {} \; > /dev/null 2>&1    通过Linux自带文  件查找命名去查找备份目录下以.sql.gz结尾的文件并且条件是文件类型是文件和是三天前建立的文件,如果满足条件就把这个文件删除了(这样我们就不用手动去删除备份文件了)并且将命令执行的结果返回到 空设备(这里大家也可以改成将备份得到的结果写到文件里这样就可以有个备份日志文件了)

mysqldump 简介:
mysqldump是MySQL自带的逻辑备份工具。它的备份原理是通过协议连接到MySQL数据库,将需要备份的数据查询出来,将查询出来的数据转换成对应的 insert语句,当我们需要还原这些数据时,只要执行这些insert语句,即可将对应的数据还原。

mysqldump的优点:可以直接使用文本处理工具处理对应的备份数据,因为备份数据已经被mysqldump转换为了对应的insert语句,所有我们可以借助文件系统中的文本处理工具对备份数据进行直接处理。

mysqldump的缺点:当数据为浮点数据类型时会出现精度丢失。mysqldump的备份过程属于逻辑备份,备份速度、恢复速度与物理备份工具相比较慢而且mysqldump备份的过程是串行化的,不会并行的进行备份。如果想要并行备份,可以使用mydumper。
mysqldump对myisam存储引擎只支持温备,通过mysqldump对使用myisam存储引擎的表进行备份时,最多只能实现温备,因为在备份时会对备份的表请求锁,当备份完成后,锁会被释放。

1
(大家请仔细核对代码千万别敲错了哦)

二、备份脚本编写

vim backup.sh (这里新建一个shell 脚本文件最后以.sh进行结尾这是因为方便识别文件类型,文件自行决定)将上面的脚本复制或者手敲进去都可以

:wq (保存脚本文件)

chmod 770 backup.sh (shell 脚本必须具有 (x)执行权限并且其他用户组不能查看或者执行这是因为这个脚保存了数据库的账号和密码的)

2
(保存好的脚本文件如上图)

三、添加任务计划

上面的脚本只实现了数据库的备份以及备份文件的删除还不能自动每天去执行。现在我们去借助Linux的任务计划来达到自动化的效果crond 是linux用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。crond命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。

crond常用命令介绍:
crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
crontab -l //列出某个用户cron服务的详细内容
crontab -r //删除没个用户的cron服务
crontab -e //编辑某个用户的cron服务
crontab -e   (我们来新建一个任务,添加如下代码)
00 06 * * * /xxx/xxx/backup.sh   (这个任务的意思是在每天早上六点钟去执行备份脚本目录下的备份脚本00表示分钟  06表示
                                  小时(24小时制)  备份脚本的路径)

:wq (保存离开)

3
(可以看到这台服务器已经添加很多的任务计划了)

四、验证备份结果

1.在备份脚本的目录执行 ./backup.sh 看看备份目录下是否多了数据库备份文件(如何没有请检查代码是否错误或者没有执行权限)

2.备份好的数据文件一定要进行还原测试,千万别到要用备份文件才发现备份文件为空或者无法还原到数据库里那就悲催了!

3.crontab -l 查看任务计划是否被添加了,计划任务是否正确

4.根据自己设置删除备份文件的天数后检查文件是否被删除或者被多删除了

4_jpeg
(这是备份脚本备份的备份文件,可以发现随着数据库数据量的变化备份文件大小也在变化)

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
10天前
|
存储 SQL 关系型数据库
|
7天前
|
存储 SQL 监控
关系型数据库备份与恢复基础
【7月更文挑战第1天】
13 2
|
3天前
|
数据库
提取本地路径Jpg或者mp4文件的名字,导入mp4的名字,并导入数据库的源码
提取本地路径Jpg或者mp4文件的名字,导入mp4的名字,并导入数据库的源码
|
3天前
|
数据库
获取本地某文件中的以.jpg文件的名字,并导入数据库的测试代码
获取本地某文件中的以.jpg文件的名字,并导入数据库的测试代码
|
3天前
|
SQL 关系型数据库 MySQL
Navicate,数据库,Mysql,改表,4月29日Finished - Unsuccessfully,导出数据不妨,右键,备份一下Mysql数据库的内容,你想导入和导出数据不如,用查询的方式去做
Navicate,数据库,Mysql,改表,4月29日Finished - Unsuccessfully,导出数据不妨,右键,备份一下Mysql数据库的内容,你想导入和导出数据不如,用查询的方式去做
|
10天前
|
数据库
|
10天前
|
编译器 API 数据库
技术好文共享:(xxxx)十一:SQLite3的db数据库解密(三)数据库在线备份
技术好文共享:(xxxx)十一:SQLite3的db数据库解密(三)数据库在线备份
16 0
|
5天前
|
XML Java 关系型数据库
Action:Consider the following: If you want an embedde ,springBoot配置数据库,补全springBoot的xml和mysql配置信息就好了
Action:Consider the following: If you want an embedde ,springBoot配置数据库,补全springBoot的xml和mysql配置信息就好了
|
5天前
|
关系型数据库 MySQL 数据库
关系型数据库mysql数据增量恢复
【7月更文挑战第3天】
16 2
|
5天前
|
关系型数据库 MySQL Shell
关系型数据库mysql数据完全恢复
【7月更文挑战第3天】
13 2