原创

[Docker]MySql 定时备份

前言

今天调整了机器的参数,要做一个备份,想到还没有做自动备份,要是数据丢了,就啥都没了。所以研究了下,使用mysqldump来定时备份mysql的数据。

分析

我这块数据库是在容器中运行的,在宿主机上无法直接运行mysqldump命令进行备份(宿主机不关心数据库实例类型,且不会安装这些东西),而如果要备份就需要使用docker exec进入容器中进行备份,这显然提供了一条思路给我们。 我现在需要挂载一个路径给容器内的mysql实例,好让容器能够将备份后的文件直接的存放下来。然后需要编写一个crontab自动任务脚本。

容器挂载目录

因为容器使用的时候,采用最少修改原则,就是尽量不要动容器的自动生成配置,所以我这里先停止容器,并且移除。 容器先执行停止操作docker stop mysql。 容器移除docker rm mysql'。 添加挂载目录-v /bak/mysqlbak/:/tmp/mysqlbak` 例如下面的脚本

sudo docker run  \
 --network=djc8net --name mysql \
 -v /database/data/:/var/lib/mysql   \
 -v /database/mysql/conf:/etc/mysql/conf.d \
 -v  /bak/mysqlbak/:/tmp/mysqlbak \
 -e MYSQL_ROOT_PASSWORD=test \
 -d mysql:8.0.22

操作完成后,容器内就可以看到包含了/tmp/mysqlbak目录,这个目录就是我们做备份要存放的路径。

备份脚本

使用mysqldump可以灵活的将数据备份为sql脚本,方便分发。 首先创建一个sh文件:touch /tool/autojob/bak_mysql.sh 内容如下:

#!/bin/bash
export NOW="$(date +"%Y-%m-%d")"
export DATA_DIR=/tmp/mysqlbak
docker exec -it mysql /bin/bash -c "mysqldump -uroot -ptest --set-gtid-purged=OFF --all-databases > $DATA_DIR/$NOW.sql"

我这里备份的是所有的数据库。

授予权限:chmod +x /tool/autojob/bak_mysql.sh 调试运行:./tool/autojob/./bak_mysql.sh 没有问题的话查看下/bak/mysqlbak就会看到以当前日期为名字的sql脚本了。

自动运行备份脚本

执行:crontab -e. 在最底下添加一行:20 01 * * * /tool/autojob/bak_mysql.sh 保存,并且执行:crontab -l。列表中就会出现这一行了。 备份时间为每天的早上01点20分。

温馨提示:
本文最后更新于 2021年02月08日,已超过 728 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我
正文到此结束
该篇文章的评论功能已被站长关闭
本文目录