Docker 备份 Mysql 并上传 Minio

105 阅读1分钟

备份脚本

写死 mysql 参数之后其他数据库需要备份就需要单独制作镜像,所以使用环境变量的方式控制备份那个库。

#!/bin/bash
# 获取今天的时间
current_time=$(date +'%Y-%m-%d')
#执行mysqldump 备份命令
mysqldump -h ${MYSQL_HOST} -P ${MYSQL_PORT} -u root -p${MYSQL_ROOT_PASSWORD} ${MYSQL_DATABASE} > /backup/${MYSQL_DATABASE}_db_backup_$current_time.sql
#minio api地址
MINIO_SERVER_URL="https://xx.com"
#minio 用户
ACCESS_KEY="root"
#minio 密码
SECRET_KEY="123333"
#备份到的桶
BUCKET_NAME="backup"
# 要上传的文件路径
FILE_PATH=/backup/${MYSQL_DATABASE}_db_backup_$current_time.sql
# 使用mc配置MinIO服务器
/mc alias set myminio "$MINIO_SERVER_URL" "$ACCESS_KEY" "$SECRET_KEY"
# 上传文件
/mc cp "$FILE_PATH" "myminio/$BUCKET_NAME/${MYSQL_DATABASE}_db_backup_$current_time.sql"
#由于挂载了存储 为了防止存储爆掉 今天的备份完毕之后删除昨天的备份文件
yesterday=$(date -d "yesterday" +"%Y-%m-%d")
#删除 Docker 昨天文件
rm -rf /backup/${MYSQL_DATABASE}_db_backup_$yesterday.sql
# 获取7天之前的日期
seven_days_ago=$(date -d "7 days ago" +"%Y-%m-%d")
#删除 minio 中7天之前的文件
/mc rm myminio/$BUCKET_NAME/${MYSQL_DATABASE}_db_backup_$seven_days_ago.sql

制作自定义 Docker 镜像

制作自定义镜像,下载 Mysql-client ,下载 Minio 客户端 MC

# 依赖的基础镜像
FROM ubuntu:latest
# 下载 mysql-client 下载 wget 下载 minio 客户端 mc
# centos 使用 yum下载 ubuntu 使用 apt下载
RUN apt-get update && apt-get install -y mysql-client && apt-get install -y wget  && wget https://dl.minio.org.cn/client/mc/release/linux-amd64/mc
#上面的脚本copy到容器内
COPY backup.sh /backup.sh
# 脚本和mc 赋予可执行权限
RUN chmod +x backup.sh && chmod +x mc
执行备份脚本
CMD ["/backup.sh"]

构建镜像

docker build -t mysqlback:v1 .

运行测试

docker run -e MYSQL_HOST=192.168.1.100  -e MYSQL_PORT=3306  -e MYSQL_DATABASE=db -e MYSQL_ROOT_PASSWORD=root  -v /home/mysqlback/back:/backup mysqlback:v1

k8s 部署

在k8s 中部署一个 cronjob 类型的pod 然后设置所需备份的mysql环境变量即可