对Docker部署的MySQL中的数据进行备份恢复

文章目录

[1. 启动MySQL容器](#1. 启动MySQL容器)

[2. 使用 docker exec 运行 mysqldump](#2. 使用 docker exec 运行 mysqldump)

[2.1 备份单个数据库](#2.1 备份单个数据库)

[2.2 备份所有数据库](#2.2 备份所有数据库)

[3. 压缩备份文件](#3. 压缩备份文件)

[3.1 压缩备份单个数据库](#3.1 压缩备份单个数据库)

[3.2 压缩备份所有数据库](#3.2 压缩备份所有数据库)

[4. 自动化备份](#4. 自动化备份)

[4.1 编辑 crontab 文件](#4.1 编辑 crontab 文件)

[4.2 添加备份任务](#4.2 添加备份任务)

[5. 恢复备份](#5. 恢复备份)

[5.1 恢复单个数据库](#5.1 恢复单个数据库)

[5.2 恢复所有数据库](#5.2 恢复所有数据库)

[5.3 恢复压缩备份](#5.3 恢复压缩备份)

[6. 注意事项](#6. 注意事项)


使用Docker部署的MySQL进行备份/恢复与传统方式类似,但需要考虑Docker容器的特殊性。以下是详细的步骤,帮助你在Docker环境中进行MySQL的全量备份。

1. 启动MySQL容器

假设你已经有一个运行中的MySQL容器,可以通过以下命令获取容器ID或名称:

复制代码
docker ps
2. 使用 docker exec 运行 mysqldump

docker exec 命令允许你在运行中的容器内执行命令。以下是一个示例,备份名为 mydatabase 的数据库:

2.1 备份单个数据库
复制代码
docker exec -i <container_name_or_id> sh -c 'exec mysqldump -u root -p<password> mydatabase' > mydatabase_backup.sql

参数说明:

  • <container_name_or_id>: 替换为你的MySQL容器的名称或ID。
  • -u root -p: 替换为你的MySQL用户名和密码。
  • mydatabase: 要备份的数据库名称。
  • > mydatabase_backup.sql: 将备份内容输出到本地文件中。
2.2 备份所有数据库
复制代码
docker exec -i <container_name_or_id> sh -c 'exec mysqldump -u root -p<password> --all-databases' > all_databases_backup.sql
3. 压缩备份文件

为了节省磁盘空间,可以在备份过程中直接压缩输出文件:

3.1 压缩备份单个数据库
复制代码
docker exec -i <container_name_or_id> sh -c 'exec mysqldump -u root -p<password> mydatabase' | gzip > mydatabase_backup.sql.gz
3.2 压缩备份所有数据库
复制代码
docker exec -i <container_name_or_id> sh -c 'exec mysqldump -u root -p<password> --all-databases' | gzip > all_databases_backup.sql.gz
4. 自动化备份

为了定期自动备份数据库,可以使用 cron 任务。以下是一个示例 crontab 条目,每天凌晨1点备份 mydatabase 并压缩:

4.1 编辑 crontab 文件
复制代码
crontab -e
4.2 添加备份任务
复制代码
0 1 * * * docker exec -i <container_name_or_id> sh -c 'exec mysqldump -u root -p<password> mydatabase' | gzip > /path/to/backup/mydatabase_$(date +%Y%m%d).sql.gz

参数说明:

  • 0 1 * * *: 每天凌晨1点执行。
  • docker exec -i <container_name_or_id> sh -c 'exec mysqldump -u root -p mydatabase': 在指定的MySQL容器中备份 mydatabase。
  • | gzip: 压缩备份文件。
  • > /path/to/backup/mydatabase_$(date +%Y%m%d).sql.gz: 将备份文件保存到指定路径,并使用日期命名。
5. 恢复备份

恢复备份时,可以使用 mysql 命令将备份文件导入到数据库中。

5.1 恢复单个数据库
复制代码
docker exec -i <container_name_or_id> mysql -u root -p<password> mydatabase < mydatabase_backup.sql
5.2 恢复所有数据库
复制代码
docker exec -i <container_name_or_id> mysql -u root -p<password> < all_databases_backup.sql
5.3 恢复压缩备份

如果备份文件是压缩的,需要先解压再恢复:

复制代码
gunzip < mydatabase_backup.sql.gz | docker exec -i <container_name_or_id> mysql -u root -p<password> mydatabase
6. 注意事项
  • 权限: 确保备份用户有足够的权限访问所有需要备份的数据库和表。
  • 性能: 大型数据库备份可能会对服务器性能产生影响,建议在低峰时段进行备份。
  • 安全性: 不要在脚本中明文存储密码,可以使用配置文件或环境变量来管理密码。
  • 容器状态: 确保MySQL容器在备份时是运行状态。

通过以上步骤,你可以在Docker环境中有效地进行MySQL的备份和恢复。

相关推荐
todoitbo3 小时前
群晖NAS部署JmalCloud:Docker安装、文件管理、博客与公网访问完整教程
运维·docker·容器
时间售卖铺3 小时前
触发器与函数实战:MySQL高效编程秘诀
运维·数据库·mysql·云原生
数据库小组6 小时前
NineData 实战教程:MySQL 5.5 数据迁移同步到 MySQL 8.0(跨版本升级)
数据库·mysql·mysql优化·数据库开发·数据库迁移·版本升级·数据复制
cnskylee8 小时前
【MySQL】麒麟V10 SP3系统安装MySQL-Commercial-8.0.46
数据库·mysql·adb
梦幻通灵8 小时前
修改MySQL数据库递增序列【持续更新】
数据库·mysql
大侠归来9 小时前
常用 MySQL 分库分表方案详解
数据库·mysql
是枚小菜鸡儿吖10 小时前
Home Assistant跨品牌智能家居教程:Docker部署、米家接入、vivo桥接与远程访问
docker·容器·智能家居
螺蛳粉 螺蛳粉13 小时前
第 02 篇:镜像分层与 containerd 2.x 实战:SystemdCgroup 与 pause 镜像配置踩坑(底座认知 02)
docker·云原生·容器·kubernetes·etcd·containerd·kube-apiserver
`Levie13 小时前
MySQL-数据库服务日志管理与数据闪回
数据库·mysql
wefg113 小时前
【Docker】镜像相关指令
运维·docker·容器