You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes部署单实例MySQL 8后客户端连接报1045访问被拒绝如何解决

Kubernetes部署MySQL 8.x 1045访问拒绝问题排查修复方案

官方原《Run a Single-Instance Stateful Application》教程默认适配MySQL 5.x版本,更换为MySQL 8.x后出现1045报错的核心原因是MySQL 8.x在初始化逻辑、密码认证插件上的版本差异,可按照如下步骤排查修复:

1. 校验部署配置的环境变量

MySQL 8.x对初始化环境变量的校验更严格,先检查部署资源的env配置:

  • 确认MYSQL_ROOT_PASSWORD值和连接时使用的密码完全一致,无多余空格、未转义特殊字符
  • 不能同时配置MYSQL_ALLOW_EMPTY_PASSWORD、MYSQL_RANDOM_ROOT_PASSWORD这类和固定root密码冲突的环境变量

2. 清理残留的旧版本持久化数据

如果之前使用MySQL 5.x镜像挂载过同一PV启动,旧数据目录里的用户认证信息不会因为更换镜像重新生成,会导致密码不匹配:

  1. 删除当前MySQL部署资源和关联PVC
kubectl delete deployment <mysql-deployment-name>
kubectl delete pvc <mysql-pvc-name>
  1. 重新创建PVC和MySQL部署资源,触发MySQL 8.x全新初始化数据目录

3. 调整认证插件兼容客户端

MySQL 8.x默认使用caching_sha2_password认证插件,部分客户端连接时会出现认证失败,可在部署时添加启动参数切换为兼容的旧版插件:
在Deployment的spec.template.spec.containers下新增args配置:

args:
  - --default-authentication-plugin=mysql_native_password

4. 验证与权限修复

重新部署完成后先执行连接命令测试:

kubectl run -it --rm --image=mysql:8 --restart=Never mysql-client -- mysql -h mysql -ppassword

如果仍报错,先进入MySQL Pod本地登录确认密码有效性:

kubectl exec -it <mysql-pod-name> -- bash
mysql -uroot -ppassword

本地可登录的情况下,执行如下SQL开放root用户远程访问权限:

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的root密码';
FLUSH PRIVILEGES;

内容的提问来源于stack exchange,提问作者Roy Yosef

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 15:09:01