解决页

为什么重建 MySQL 5.7 容器后旧密码仍然有效

安装脚本重建 mysql57 时会继续挂载 /data/mysql5.7/data。MySQL 只会在数据目录为空时初始化账号,因此已有数据库不会因安装变量变化而重置凭据。

更新时间 2026-10-29

问题说明

重跑时我改了 MYSQL_ROOT_PASSWORD、数据库名或用户名,为什么旧凭据和数据还在?

这个 helper 会删除并重建同名容器,但会把已有宿主机目录 /data/mysql5.7/data 再挂载到新容器。删除容器不会删除 bind mount 中的数据库。

MySQL 官方镜像只会在空数据目录创建数据库时应用 MYSQL_ROOT_PASSWORD、MYSQL_DATABASE、MYSQL_USER、MYSQL_PASSWORD 和初始化文件。目录已有数据库时,这些初始化设置不会重写账号或数据。因此 helper 新生成并打印的密码,可能不是现有数据库接受的密码。

不要为了强制初始化而删除或清空数据目录。先确认当前挂载并保全数据库。如果仍有获授权的账号,通过经过审查的 SQL/管理流程改密;如果已无法登录,先规划并验证备份与恢复路径,再做任何修改。

处理重点

  • 只读检查:运行 docker inspect mysql57 --format "{{json .Mounts}}",确认实际数据挂载目录。
  • 只读检查:用 docker ps --filter name=mysql57 和 docker logs --tail 100 mysql57 查看容器状态与启动输出;日志可能含敏感信息。
  • 如果已有获授权的账号仍可用,执行 SELECT VERSION(), CURRENT_USER(); 确认实际连接的服务和账号。
  • 在备份与恢复方案经过验证前保留原数据目录;不要把重建容器当成数据库重置。

所属专题

PHP 7.2/Workerman 3.5.24 示例用于有升级计划的遗留兼容工作。