如何在docker环境恢复mysql_mysql容器恢复步骤

来源:这里教程网 时间:2026-02-28 20:44:06 作者:

在 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 ... ,因<a style="color:#f60; text-decoration:underline;" title="编码" href="https://www.php.cn/zt/16108.html" target="_blank">编码</a>、权限或连接参数易出错。稳妥做法是进入容器后手动导入:

启动或重启容器并挂载备份目录:
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
导入:
exit

docker 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;

相关推荐