2025-06-24
docker
00

目录

✅ 方法一:使用 mysqldump 从容器中导出 SQL 文件(推荐)
步骤
备份所有数据库:
✅ 方法二:使用 docker exec 结合宿主机的 mysqldump (也可直接在宿主机执行)
✅ 方法三:备份 MySQL 的数据目录(物理备份)
示例:
✅ 方法四:使用 Docker Volume 备份(卷级别)
✅ 自动备份脚本(每日定时任务)

相关信息

本文内容包含AI生成


备份 Docker 中的 MySQL 数据库可以通过多种方式实现,下面是几种常见方法,取决于你是要备份数据库数据文件,还是通过 mysqldump 导出 SQL 文件。

✅ 方法一:使用 mysqldump 从容器中导出 SQL 文件(推荐)

适合逻辑备份,备份成 .sql 文件,便于迁移、恢复。

步骤

假设容器名为 mysql_container,MySQL 用户为 root,密码为 password,数据库为 mydb

bash
docker exec mysql_container \ mysqldump -u root -p'mypassword' mydb > mydb_backup.sql

注意:-p 与密码之间 不能有空格,否则会报错。

备份所有数据库:

bash
docker exec mysql_container \ mysqldump -u root -p'mypassword' --all-databases > all_backup.sql

✅ 方法二:使用 docker exec 结合宿主机的 mysqldump (也可直接在宿主机执行)

如果 MySQL 暴露了端口,也可以用宿主机的 mysqldump 命令:

bash
mysqldump -h 127.0.0.1 -P 3306 -u root -p mydb > mydb_backup.sql

前提是你的容器已经通过端口映射暴露出 MySQL 的端口(如 -p 3306:3306)。


✅ 方法三:备份 MySQL 的数据目录(物理备份)

如果你使用 volume 挂载了 MySQL 数据目录,也可以直接备份数据文件。

示例:

bash
# 查看容器挂载的卷 docker inspect mysql_container | grep Mounts -A 20 # 进入卷路径,例如: cp -r /var/lib/docker/volumes/mysql_data/_data /backup/mysql_data_backup

⚠️ 注意:这种方式是物理备份,MySQL 必须停止写入,否则数据可能不一致。


✅ 方法四:使用 Docker Volume 备份(卷级别)

如果你将数据保存在 Volume 中,可以用 docker cp 或创建临时容器备份:

bash
docker run --rm \ -v mysql_data:/volume \ -v $(pwd):/backup \ alpine \ tar czf /backup/mysql_data.tar.gz -C /volume .

✅ 自动备份脚本(每日定时任务)

可以放入 cron 定时任务,例如每日凌晨备份:

bash
#!/bin/bash DATE=$(date +"%Y-%m-%d") docker exec mysql_container \ mysqldump -u root -p'mypassword' mydb > /path/to/backup/mydb_$DATE.sql

添加到 crontab:

bash
0 2 * * * /path/to/script/backup_mysql.sh

本文作者:zion

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!