news 2026/4/27 1:08:16

MySQL 9.5.0 部署全踩坑指南(WSL+Docker环境)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MySQL 9.5.0 部署全踩坑指南(WSL+Docker环境)

前言:本文记录 WSL 环境下,使用 Docker 部署 MySQL 9.5.0 的完整过程,包含所有遇到的报错、根源分析及一步到位的解决方案,适合新手避坑,全程可复制操作,最终实现 MySQL 正常运行、外部成功连接。
一、环境说明

  • 运行环境:WSL(Ubuntu)+ Docker + Docker Compose
  • MySQL 版本:9.5.0(最初因版本兼容踩坑,最终成功部署)
  • 核心需求:部署 MySQL 9.5.0,确保服务正常运行,支持外部(WSL/本地)连接
    二、全程踩坑记录(报错+解决方案)
    本次部署从 MySQL 启动失败,到权限报错、连接失败,全程踩坑6个,逐一解决后实现正常运行,以下按报错顺序整理,每个问题均附根源+可复制解决方案。
    坑1:MySQL 版本升级兼容报错(最开始的核心问题)
    报错信息
    2026-04-26T11:50:20.589930Z 1 [ERROR] [MY-014060] [Server] Invalid MySQL server upgrade: Cannot upgrade from 80046 to 90500. Upgrade to next major version is only allowed from the last LTS release, which version 80046 is not.
    2026-04-26T11:50:20.590133Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
    2026-04-26T11:50:20.590151Z 0 [ERROR] [MY-010119] [Server] Aborting
    报错根源
    本地数据目录(./mysql/data)中残留了 MySQL 8.0.46 的旧数据,而 MySQL 9.5.0 不支持直接从非 LTS 版本(8.0.46)升级,导致数据字典初始化失败,服务启动 abort。
    解决方案
    核心:清空旧数据目录,或直接更换新的数据目录(推荐更换,避免删不干净),步骤如下:

1. 停止并删除当前 MySQL 容器

docker-compose down

2. 重命名旧数据目录(备份,避免误删)

mv ./mysql/data ./mysql/data_old

3. 新建空的数据目录

mkdir ./mysql/data

4. 重新启动容器(后续会优化配置,此处先解决数据冲突)

docker-compose up -d
坑2:数据目录权限不足,无法删除/操作文件
报错信息
rm: cannot remove ‘data/public_key.pem’: Permission denied
rm: cannot remove ‘data/#innodb_redo’: Permission denied
…(所有数据目录下的文件均报权限不足)
报错根源
Docker 容器内的 MySQL 进程以 mysql 用户(uid=999)运行,本地 WSL 普通用户没有权限操作容器挂载目录下的文件,导致无法删除旧数据或修改目录。
解决方案
用 sudo 提升权限,强制操作目录(或直接更换数据目录,如坑1所示):

强制清空数据目录(若未更换目录,需执行此步)

sudo rm -rf ./mysql/data/*
坑3:Docker 挂载路径不存在,容器启动失败
报错信息
Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error mounting “/run/desktop/mnt/host/wsl/docker-desktop-bind-mounts/Ubuntu/…” to rootfs at “/var/lib/mysql”: no such file or directory
报错根源
删除旧数据目录后,Docker 仍记录着旧的挂载路径,导致容器启动时无法找到对应的挂载目录,触发路径不存在报错。
解决方案
彻底关闭 WSL 和 Docker,删除旧容器,重新启动:

1. 彻底关闭 WSL(清除缓存)

wsl --shutdown

2. 删除报错的 MySQL 容器(容器名:mysql-server,按实际修改)

docker rm -f mysql-server

3. 重新启动容器

docker-compose up -d
坑4:MySQL 9.5.0 不支持旧配置参数,启动失败
报错信息
2026-04-26T12:06:40.942718Z 0 [ERROR] [MY-000067] [Server] unknown variable ‘default-authentication-plugin=mysql_native_password’.
报错根源
Docker Compose 配置中,command 参数包含了 MySQL 8.x 的旧配置项 --default-authentication-plugin=mysql_native_password,而 MySQL 9.5.0 已废弃该参数,导致启动报错。
解决方案
修改 Docker Compose 配置,删除废弃参数,最终可用配置如下(完整可复制):
mysql:
image: mysql:9.5.0
container_name: mysql-server
environment:
- MYSQL_ROOT_PASSWORD=root123 # root 密码
ports:
- “13306:3306” # 端口映射(外部13306,内部3306)
volumes:
- ./mysql/data:/var/lib/mysql # 数据目录挂载
- ./mysql/init:/docker-entrypoint-initdb.d # 初始化脚本挂载(无需求可删除)
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci # 仅保留字符集配置
networks:
- test-ruoyi01 # 网络配置(按自己的网络名修改)
坑5:MySQL 启动成功,但表不存在(数据目录未清空干净)
报错信息
mysqld: Table ‘mysql.plugin’ doesn’t exist
2026-04-26T12:09:24.551647Z 0 [ERROR] [MY-010735] [Server] Could not open the mysql.plugin table. Please perform the MySQL upgrade procedure.
2026-04-26T12:09:24.728314Z 0 [ERROR] [MY-010326] [Server] Fatal error: Can’t open and lock privilege tables: Table ‘mysql.user’ doesn’t exist
报错根源
虽然更换了数据目录,但可能未彻底清空,仍残留少量旧数据文件,导致 MySQL 9.5.0 初始化时无法创建系统表(如 mysql.user、mysql.plugin)。
解决方案
重新执行“停止容器→清空/更换数据目录→重启容器”步骤,确保数据目录完全为空:

1. 停止容器

docker-compose down

2. 彻底清空新数据目录(确保无残留)

sudo rm -rf ./mysql/data/*

3. 重启容器,MySQL 会重新初始化系统表

docker-compose up -d
执行后,MySQL 会正常初始化,系统表自动创建,启动日志最后会显示“ready for connections”,代表启动成功。
坑6:MySQL 启动成功,但外部/数据库工具连接失败
报错信息
DBMS: MySQL (ver. 9.5.0)
Case sensitivity: plain=mixed, delimited=exact
NotBefore: Sun Apr 26 12:12:01 UTC 2026.
Failed
报错根源
有两个核心原因:

  1. root 用户默认只能在容器内访问,无法从外部(WSL/本地)连接;
  2. MySQL 9.5.0 对 TLS 协议版本有要求,默认 TLS 版本不兼容,导致连接被拒绝。
    解决方案
    分两步解决,先授权 root 用户,再修改连接参数:
    步骤1:给 root 用户授权(允许外部访问)

1. 进入 MySQL 容器(root 账号登录,密码 root123)

docker exec -it mysql-server mysql -uroot -proot123

2. 执行授权语句(复制3行,逐行执行)

ALTER USER ‘root’@‘%’ IDENTIFIED BY ‘root123’;
GRANT ALL PRIVILEGES ON.TO ‘root’@‘%’ WITH GRANT OPTION;
FLUSH PRIVILEGES;

3. 退出容器(输入 exit 即可)

步骤2:修改外部连接参数(添加 TLS 版本和必要参数)
最终可用的 JDBC 连接配置(复制到项目配置或数据库工具中):
spring.datasource.url=jdbc:mysql://localhost:13306/?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true&enabledTLSProtocols=TLSv1.2
spring.datasource.username=root
spring.datasource.password=root123
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
关键参数说明(缺一不可):

  • useSSL=false:关闭 SSL 验证,避免连接被拦截;
  • allowPublicKeyRetrieval=true:允许公钥检索,解决 MySQL 8+ 以上连接权限问题;
  • enabledTLSProtocols=TLSv1.2:指定 TLS 协议版本,解决 MySQL 9.5.0 证书时间不匹配问题;
  • serverTimezone=GMT%2B8:设置时区为东八区,避免时间同步错误。
    三、最终成功验证
  1. MySQL 容器正常运行:执行 docker ps,能看到 mysql-server 容器状态为 Up;
  2. 数据库连接成功:用数据库工具(Navicat/DBeaver)或项目连接,能正常访问 MySQL 服务;
  3. 外部访问正常:从 WSL 或本地,通过 root 账号能成功登录 MySQL,执行常规操作。
    四、避坑总结(新手必看)
  • MySQL 9.x 不兼容 8.x 非 LTS 版本的旧数据,部署前务必清空/更换数据目录;
  • MySQL 9.x 废弃了 8.x 的部分配置参数(如 default-authentication-plugin),配置时需删除;
  • Docker 挂载目录权限问题,用 sudo 提升权限即可解决;
  • MySQL 9.x 连接需指定 TLS 1.2 版本,否则会出现证书相关报错;
  • root 用户需授权外部访问(‘%’ 表示允许所有IP),否则无法从容器外部连接。
    五、常用命令汇总(可复制备用)

1. 关闭 WSL(清除缓存)

wsl --shutdown

2. 停止并删除 MySQL 容器

docker-compose down
docker rm -f mysql-server

3. 清空数据目录

sudo rm -rf ./mysql/data/*

4. 重启 MySQL 容器

docker-compose up -d

5. 进入 MySQL 容器(root 登录)

docker exec -it mysql-server mysql -uroot -proot123

6. root 用户授权(进入容器后执行,允许外部访问)

ALTER USER ‘root’@‘%’ IDENTIFIED BY ‘root123’;
GRANT ALL PRIVILEGES ON.TO ‘root’@‘%’ WITH GRANT OPTION;
FLUSH PRIVILEGES;
结尾:本次部署全程踩坑均为 MySQL 9.5.0 与旧环境、旧配置的兼容问题,只要按步骤清空数据、修改配置、授权用户,就能顺利部署并实现外部连接。如果遇到其他报错,可对照本文排查,或留言补充问题~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/27 1:06:24

AI写脚本:告别重复造轮子的高效秘籍

告别重复造轮子:Codex写脚本的技术文章大纲引言重复造轮子的痛点:开发效率低、维护成本高、标准化不足AI代码生成工具(如Codex)的兴起:快速生成脚本、减少重复劳动本文目标:探讨如何利用Codex高效编写脚本&…

作者头像 李华
网站建设 2026/4/27 1:03:21

CentOS-WSL企业级部署架构解析与最佳实践指南

CentOS-WSL企业级部署架构解析与最佳实践指南 【免费下载链接】CentOS-WSL A GitHub Actions automated CentOS RootFS to use with WSL 项目地址: https://gitcode.com/gh_mirrors/ce/CentOS-WSL CentOS-WSL项目通过自动化工作流将CentOS QCOW2云镜像转换为适用于Windo…

作者头像 李华
网站建设 2026/4/27 1:01:55

哪个AIGC检测工具数值准?2026年最新查AI率工具盘点测评拆解!

2026年答辩季临近,AIGC检测已经成为大多数高校论文审核的标配流程。不管你有没有用过A论文,学校都可能会查一遍AI率。很多同学的第一反应就是:ai率查重要多少钱?有没有能免费查AI率的工具? 有免费的aigc检测工具&…

作者头像 李华
网站建设 2026/4/27 0:55:42

终极指南:如何用AB Download Manager提升5倍下载效率

终极指南:如何用AB Download Manager提升5倍下载效率 【免费下载链接】ab-download-manager A Download Manager that speeds up your downloads 项目地址: https://gitcode.com/GitHub_Trending/ab/ab-download-manager 你是否经常遇到下载速度慢如蜗牛&…

作者头像 李华
网站建设 2026/4/27 0:55:30

可可豆缺陷检测数据集VOC+YOLO格式1744张4类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数):1744标注数量(xml文件个数):1744标注数量(txt文件个数):1744标注类别…

作者头像 李华