docker中mysql数据定时备份_[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分。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值