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

9次阅读

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

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

在 Docker 环境中恢复 MySQL 容器,核心是还原数据(而非容器本身),关键在于:确保有可用备份、挂载了持久化卷、用正确方式导入数据。容器可随时重建,数据才是重点。

确认备份文件位置和格式

MySQL 恢复依赖的是 SQL 转储文件(如 backup.sql)或物理备份(如 xtrabackup)。Docker 场景下最常用的是 mysqldump 生成的 SQL 文件。

  • 检查备份是否为纯文本 SQL(可用 head -n 5 backup.sql 查看开头是否有 CREATE databaseUSE 语句)
  • 若备份是压缩包(如 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 导入:
    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;

text=ZqhQzanResources