MySQL数据库自动备份及自动删除过期的备份文件-阿里云开发者社区

开发者社区> 数据库> 正文

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

简介: 脚本将实现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
(这是备份脚本备份的备份文件,可以发现随着数据库数据量的变化备份文件大小也在变化)

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

其他文章