Docker下的mysql定时备份
一、概要
最近因为项目需要,之前在docker下部署了mysql5.7.29版本。现在项目接近暂告一个段落,需要进行各种备份,下面就给出,本次在项目中实际用到的Linux下的docker中的MySQL数据备份的案例。
本方案的逻辑是:通过shell脚本进入到容器内部,然后通过mysqldump工具将数据文件备份到容器内部的一个/backups/mysql文件夹下。然后通过docker cp命令将容器中的文件拷贝到宿主机的文件夹上。
二、shell备份脚本
# 保留10天数据,
# mysqldocker 为安装mysql的docker
docker exec -i mysql5.7.29 bash<<'EOF'
# 判断目录是不是已经存在,如果不存在则创建
if [ ! -d "/backups/mysql" ]; then
mkdir -p /backups/mysql
fi
# supervision 为数据库的名称
mysqldump -h localhost -uroot -p123456 supervision > /backups/mysql/supervision_$(date +%Y%m%d).sql
#删除超过10天的数据
rm -f /backups/mysql/supervision_$(date -d -10day +%Y%m%d).sql
exit
EOF
# 判断目录是不是已经存在,如果不存在则创建
#if [ ! -d "/backups/mysql" ]; then
# mkdir -p /backups/mysql
#fi
# 将docker中的备份的数据拷贝到宿主机上。
sudo docker cp mysql5.7.29:/backups/mysql/supervision_$(date +%Y%m%d).sql /home/backups/mysql
#删除超过10天的数据
#rm -f /home/backups/mysql/supervison_$(date -d -10day +%Y%m%d).sql
三、脚本说明
首先从网上找的资料脚本中已经给出了比较详细的代码注释,但是落实到实际的时候也发现了几个地方的问题。下面给出解释。
3.1、进入到容器后,创建一个容器内部的备份文件夹
3.2、使用mysqldump进行数据备份
分别对应ip地址、用户名、密码、数据库名
3.3、宿主机上需要提前创建文件夹
下图为文件夹的结构
四、定时器配置
4.1、首先将备份脚本backups.sh文件放到/backups/mysql文件夹中。
4.2、安装定时工具
yum -y install vixie-cron
yum -y install crontabs
4.3、配置定时任务
# 配置定时任务
crontab -e