如何在docker环境备份mysql_mysql容器备份方法
发布时间 - 2025-12-27 00:00:00 点击率:次MySQL容器备份核心是保证一致性:推荐用mysqldump实时导出(无需停容器),或停机后对命名卷做文件级备份;配合挂载目录、压缩、定时脚本与crontab可实现自动化。
直接在 Docker 环境中备份 MySQL 容器,核心是利用 mysqldump 工具导出数据,再结合容器运行时的文件系统访问能力。关键不在于“停不停容器”,而在于确保备份一致性——即避免边写入边导出导致数据不一致。
使用 mysqldump 实时备份(推荐)
这是最常用、最安全的方式,无需停止容器,只要 MySQL 正常提供服务即可执行。
- 进入正在运行的 MySQL 容器并执行导出:
docker exec mysql-container mysqldump -u root -p'your_password' database_name > backup.sql
(注意:密码直接写在命令里有安全风险,生产环境建议用配置文件或-p交互输入) - 更稳妥的做法是挂载本地目录,把备份文件直接存到宿主机:
docker exec mysql-container mysqldump -u root -p'your_password' --all-databases > /backup/all-databases-$(date +%F).sql
前提是启动容器时已用-v /host/backup:/backup挂载了目录 - 如需压缩节省空间,可管道传递给 gzip:
docker exec mysql-container mysqldump -u root -p'your_password' mydb | gzip > backup-mydb-$(date +%F).sql.gz
基于卷(Volume)的文件级备份(适用于冷备或快速恢复)
如果容器使用了命名卷(named volume)存储数据,可直接备份卷内文件,但必须先停止 MySQL 服务(或整个容器),否则可能损坏 InnoDB 表空间。
- 查清 MySQL 数据卷名:
docker volume ls | grep mysql或查看docker inspect mysql-container中的Mounts部分 - 停止容器:
docker stop mysql-container - 用
tar打包卷内容(假设卷名为mysql_data):docker run --rm -v mysql_data:/volume -v $(pwd):/backup alpine tar czf /backup/mysql-data-$(date +%F).tar.gz -C /volume . - 备份完成后重启容器:
docker start mysql-container
自动化定时备份(加个 crontab 就行)
宿主机上写个脚本 + cron,就能每天自动备份。
- 新建脚本
/opt/scripts/mysql-backup.sh: #!/bin/bash
BACKUP_DIR="/opt/backups/mysql"
CONTAINER="mysql-container"
DATE=$(date +%F_%H-%M)
mkdir -p $BACKUP_DIR
docker exec $CONTAINER mysqldump -u root -p'password' --single-transaction --routines --triggers --events myapp_db | gzip > $BACKUP_DIR/myapp_db-$DATE.sql.gz
find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -delete- 赋予执行权限:
chmod +x /opt/scripts/mysql-backup.sh - 添加定时任务:
0 2 * * * /opt/scripts/mysql-backup.sh(每天凌晨2点执行)
恢复备份也很简单
备份是为了能用,恢复操作同样轻量:
- 恢复 SQL 文件(容器运行中):
docker exec -i mysql-container mysql -u root -p'password' mydb - 如果是压缩包,先解压再导入:
gunzip - 若用的是卷备份(.tar.gz),需先停容器、清空原卷、解压覆盖,再启动容器 —— 注意版本兼容性,不建议跨大版本恢复
不复杂但容易忽略:备份前确认字符集和排序规则是否一致;远程备份记得检查网络和权限;敏感环境别把密码写死在脚本里。用好 --single-transaction 参数,能极大降低锁表影响。
# mysql
# word
# docker
# app
# 工具
# ai
# 解压
# 配置文件
# bash
# sql
# date
# delete
# 自动化
# 的是
# 这是
# 就能
# 适用于
# 就行
# 也很
# 可直接
# 如需
# 重启
# 压缩包
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用
如何在阿里云ECS服务器部署织梦CMS网站?
Linux系统命令中screen命令详解
Laravel中间件如何使用_Laravel自定义中间件实现权限控制
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】
Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤
如何确保西部建站助手FTP传输的安全性?
小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像
Android Socket接口实现即时通讯实例代码
Laravel定时任务怎么设置_Laravel Crontab调度器配置
Laravel如何使用.env文件管理环境变量?(最佳实践)
Laravel distinct去重查询_Laravel Eloquent去重方法
Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
php增删改查怎么学_零基础入门php数据库操作必知基础【教程】
Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法
Laravel如何创建和注册中间件_Laravel中间件编写与应用流程
Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
实例解析angularjs的filter过滤器
Laravel怎么在Controller之外的地方验证数据
Laravel Seeder填充数据教程_Laravel模型工厂Factory使用
Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
java中使用zxing批量生成二维码立牌
Python文件流缓冲机制_IO性能解析【教程】
如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】
HTML 中动态设置元素 name 属性的正确语法详解
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
如何在IIS中新建站点并配置端口与IP地址?
标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析
Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解
Laravel怎么为数据库表字段添加索引以优化查询
大同网页,大同瑞慈医院官网?
网站制作免费,什么网站能看正片电影?
Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程
Swift中switch语句区间和元组模式匹配
Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程
标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南
Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】
如何用AI帮你把自己的生活经历写成一个有趣的故事?

