Docker 下备份 Mariadb 数据库文件

描述

正常来说我们备份脚本,一般都是执行数据库目录下的 ...dump 文件的,但是在镜像中并且运行的容器如何备份?

就是使用容器中的 Mariadb 自带的备份脚本

操作

1、查看我们所有正在运行的容器信息

shell 复制代码
docker ps -a

找到容器的ID

2、然后我们进入到容器

shell 复制代码
docker exec -it 镜像运行的id bash

进来之后,找到 Mariadb 安装的所在目录

shell 复制代码
find -name mariadb

找到目录后,就能看到所对应的备份文件,注意后面的mariadb不是目录!

shell 复制代码
cd /usr/bin/

ls mariadb

mariadb-dump这个就是备份脚本

验证一下脚本是否可用

shell 复制代码
mariadb-dump -uroot -p123456 你的数据库名字 > backup.sql

是有大小的,那么就可以了,记住当前dump脚本的路径。

退出去容器,用docker 的 exec 命令备份试一下

shell 复制代码
docker exec mariadb /usr/bin/mariadb-dump -uroot -p123456 你的数据库名称 > backup.sql

ok,执行成功了,大小的话,数据库数据我有变更,所以大一些。

配合外部的cron定时任务就可以进行定时了

完整的备份脚本

shell 复制代码
#!/bin/bash

# 定义变量
BACKUP_DIR="./data_file"  # 备份存储目录
CONTAINER_NAME="mariadb"           # MariaDB容器名
MYSQL_USER="root"                  # 数据库用户名
MYSQL_PASSWORD="123456"      # 数据库密码
DATABASE_NAME="你数据的名字"      # 要备份的数据库名
DATE=$(date +%Y%m%d_%H%M%S)        # 当前时间格式

# 创建备份目录
mkdir -p $BACKUP_DIR

# 使用 `docker exec` 执行 `mysqldump` 备份
docker exec $CONTAINER_NAME /usr/bin/mariadb-dump -u$MYSQL_USER -p$MYSQL_PASSWORD $DATABASE_NAME > $BACKUP_DIR/${DATABASE_NAME}_${DATE}.sql


# 压缩备份文件(可选)
gzip $BACKUP_DIR/${DATABASE_NAME}_${DATE}.sql

# 删除7天前的旧备份
find $BACKUP_DIR -type f -name "*.sql.gz" -mtime +7 -delete

定时cron命令设置凌晨12点执行一次

运行以下命令编辑当前用户的 cron 任务

shell 复制代码
crontab -e

在打开的文件末尾添加以下行

shell 复制代码
0 0 * * * 你的备份脚本路径/backup-hpc-cloud.sh

检查任务是否添加成功

shell 复制代码
crontab -l

正常会显示

shell 复制代码
0 0 * * * /opt/mariadb_backup.sh
相关推荐
l1t8 分钟前
DeepSeek总结的有符号、无符号、未对齐:从汇编到 SQL 的教训
汇编·数据库·sql
做运维的阿瑞19 分钟前
利用GitHub配置镜像加速,解决 Docker镜像拉取问题
运维·docker·容器·github
麦壳饼24 分钟前
SonnetDB SQL Cookbook:常用查询模式速查
数据库·sonnetdb
小陈运维1 小时前
使用kubeadm初始化IPV4/IPV6集群
linux·docker·云原生·容器·kubernetes
Wang's Blog1 小时前
Java 项目部署之 Docker工具快速入门: 容器命令练习:创建、改文件、重启到删除的完整闭环
java·开发语言·docker
for_ever_love__1 小时前
LangChain Text-to-SQL:让不会写 SQL 的人查数据库
数据库·sql·langchain·大模型·agent·rag·问答
梦想不只是梦与想1 小时前
SQLAlchemy:查询与操作 (三)
数据库·python·sqlalchemy
小锋学长生活大爆炸1 小时前
【工具】在 Android 手机上运行 Docker
android·docker·智能手机
Aric_Jones1 小时前
WAL / CDC / 复制槽 /位点
数据库·oracle
草莓熊Lotso2 小时前
【C++ 基于微服务的即时通讯系统】基建三件套:gflags + gtest + spdlog 源码编译安装与实战入门
linux·网络·数据库·c++·微服务·log4j