[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分。
本文来自:[Docker]MySql 定时备份-小码农,转载请保留本条链接,感谢!