Docker中恢复MySQL容器的核心是还原数据而非容器本身,需确保有可用备份、挂载持久化卷,并通过进入容器执行source命令安全导入SQL文件。

在 Docker 环境中恢复 MySQL 容器,核心是还原数据(而非容器本身),关键在于:确保有可用备份、挂载了持久化卷、用正确方式导入数据。容器可随时重建,数据才是重点。
确认备份文件位置和格式
MySQL 恢复依赖的是 SQL 转储文件(如 backup.sql)或物理备份(如 xtrabackup)。Docker 场景下最常用的是 mysqldump 生成的 SQL 文件。
- 检查备份是否为纯文本 SQL(可用
head -n 5 backup.sql查看开头是否有CREATE DATABASE或USE语句) - 若备份是压缩包(如
backup.sql.gz),需先解压:gunzip backup.sql.gz - 确保该文件能被容器访问——推荐放在宿主机目录(如
/opt/mysql/backups/),并通过-v挂载进容器
确保容器使用持久化存储
如果原容器未挂载外部卷,所有数据都在容器内,一旦删除就丢失。恢复前请确认:
- 启动容器时用了类似
-v /opt/mysql/data:/var/lib/mysql的挂载,且该目录未被清空 - 若使用命名卷(如
--volume mysql-data:/var/lib/mysql),用docker volume inspect mysql-data查看实际路径 - 恢复前建议先停掉旧容器:
docker stop mysql-container,避免写入冲突
执行数据导入(推荐进入容器操作)
不建议直接用 docker exec -i mysql-container mysql ... ,因编码、权限或连接参数易出错。稳妥做法是进入容器后手动导入:
- 启动或重启容器并挂载备份目录:
docker run -d --name mysql-restore \-v /opt/mysql/data:/var/lib/mysql \-v /opt/mysql/backups:/backups \-e MYSQL_ROOT_PASSWORD=123456 \-p 3306:3306 mysql:8.0 - 进入容器:
docker exec -it mysql-restore mysql -uroot -p123456 - 在 MySQL 提示符下创建目标数据库(若 dump 中不含
CREATE DATABASE):CREATE DATABASE IF NOT EXISTS myapp; - 退出 MySQL,再用
source导入:exitdocker exec -it mysql-restore mysql -uroot -p123456 myapp
验证与收尾
导入完成后别跳过验证步骤:
- 连上 MySQL:
docker exec -it mysql-restore mysql -uroot -p123456 - 运行
SHOW DATABASES;确认库存在,再USE myapp; SHOW TABLES;看表是否齐全 - 抽样查几条数据:
SELECT COUNT(*) FROM users; - 确认无报错后,可将容器重命名为正式名:
docker rename mysql-restore mysql-prod
不复杂但容易忽略:恢复前务必关闭应用写入,导入后检查字符集(特别是含中文时),dump 文件里最好包含 SET NAMES utf8mb4;。










