Spring Cloud 微服务系列文章,点击上方合集↑
1. 开头
MySQL是一个广泛使用的关系型数据库管理系统,为了避免数据丢失和损坏的风险,定期备份数据库是一种行之有效的解决方案。本文将介绍如何编写备份脚本、执行脚本,并使用crond实现定时执行备份任务,以确保MySQL数据库的数据得到可靠的保护。
2. 编写备份脚本
编写备份数据库脚本vim backup.sh
,内容如下:
mysqldump -h127.0.0.1 -uroot -p123456 \
--single-transaction \
--set-gtid-purged=OFF \
--all-databases \
--source-data=2 \
--triggers --events \
--routines | gzip \
> /home/backup/all_$(date +%Y%m%d_%H%M%S).sql.gz
-
-h127.0.0.1
:指定要备份的MySQL服务器的主机名或IP地址。这里使用的是本地主机(127.0.0.1)。 -
-uroot
:使用root用户进行登录。在实际使用时,可以将root替换为其他具有足够权限的有效用户名。 -
-p123456
:指定root用户的密码。这个例子中,密码是123456。在实际使用时,请将其替换为实际的密码。 -
--single-transaction
:在备份过程中使用事务,确保备份数据的一致性。这个参数对于大型数据库备份非常有用,因为它避免了锁定整个数据库。 -
--set-gtid-purged=OFF
:关闭GTID(全局事务标识)的删除。默认情况下,如果启用了GTID,mysqldump
会在备份期间自动删除GTID信息。通过设置为OFF,就可以保留GTID信息。 -
--all-databases
:备份所有数据库。如果只想备份特定的数据库,可以替换为要备份的数据库名。 -
--source-data=2
:生成输出文件时,在备份文件的注释部分包括主服务器的日志文件和位置。这个选项适用于主从复制环境,可以用于恢复备份数据并重新启动从服务器。 -
--triggers
:备份时包括触发器的定义,以便在恢复数据时能正确创建触发器。 -
--events
:备份时包括事件的定义,以便在恢复数据时能正确创建事件。 -
--routines
:备份时包括存储过程和函数的定义,以便在恢复数据时能正确创建它们。 -
| gzip > /home/backup/all_$(date +%Y%m%d_%H%M%S).sql.gz
:将备份数据通过管道传递给gzip压缩命令,并将压缩后的数据保存到指定的路径。$(date +%Y%m%d_%H%M%S)
部分是使用Shell命令获取当前日期和时间,并将其作为压缩文件名的一部分。
确保备份路径(/home/backup/)对于执行命令的用户是可写的,并根据需要进行相应的调整。
3. 执行脚本
给该脚本文件赋予执行权限:
chmod +x backup.sh
执行脚本:
./backup.sh
- 执行后会生成类似
all_20230922_162449.sql.gz
这样的备份文件。
4. crond定时执行脚本
开启crond
服务,并crontab -e
设置每晚3点30执行备份脚本。
# 开启crond
systemctl start crond
# 编辑定时任务
crontab -e
30 3 * * * /home/backup/backup.sh
# 查看定时任务
crontab -l
#日志
tail -f /var/log/cron
5. 结尾
通过编写备份脚本、执行脚本并设置定时执行任务,我们可以轻松地实现定时备份MySQL数据库。这种自动化的备份策略不仅省去了手动备份的麻烦,还可以保障数据的安全和可靠性。
在实际情况中:假设在9点对数据库进行了备份,且在10点发生了故障。此时,可以使用9点的备份文件来还原数据库至9点的状态,但是因为备份文件不包含10点之后的数据变化,所以需要使用数据库日志文件来还原10点之后的数据更新,以尽可能地恢复数据库至故障之前的状态。
Spring Cloud 微服务系列 完整的代码在仓库的sourcecode/spring-cloud-demo
目录下。
gitee(推荐):https://gitee.com/cunzaizhe/xiaohuge-blog
github:https://github.com/tigerleeli/xiaohuge-blog
关注微信公众号:“小虎哥的技术博客”,让我们一起成为更优秀的程序员❤️!