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

Kubernetes部署MySQL 8报ERROR 1045 root访问被拒问题求助

MySQL 8 部署登录1045错误解决步骤
  • Secret配置错误修正

Kubernetes Secret的stringData字段用于填写明文内容,无需提前做Base64编码,仅data字段要求值为Base64编码后的内容。你当前配置中把Base64编码值cGFzc3dvcmQK(解码后为带换行符的password)填入了stringData字段,导致MySQL实际设置的root密码为字符串cGFzc3dvcmQK,和你输入的password不匹配,这是核心报错原因。

修正后的Secret可二选一:

apiVersion: v1
kind: Secret
metadata:
  name: mysql-pass
  namespace: mysql
type: kubernetes.io/basic-auth
# 方案1:使用data字段,填入正确的不带换行的Base64编码值
data:
  password: cGFzc3dvcmQ=
---
# 方案2:使用stringData字段,直接填入明文密码
# stringData:
#   password: password
  • 清理存量数据重新初始化

MySQL容器仅在首次启动、/var/lib/mysql目录为空时才会读取MYSQL_ROOT_PASSWORD环境变量设置密码,若之前启动过MySQL,PV中已经存在存量数据,后续修改Secret不会更新已有数据库的root密码。
操作步骤:

  1. 删除已有的MySQL Deployment
  2. 清空PVC关联PV中的所有数据,或直接删除旧PVC、创建新PVC
  3. 应用修正后的Secret,再重新创建Deployment
  • 开启root用户远程访问权限

MySQL 8默认创建的root用户仅允许localhost登录,外部IP访问即使密码正确也会触发1045报错。你可以在Deployment的env配置中新增MYSQL_ROOT_HOST参数,允许root用户从指定IP段访问:

containers:
- image: mysql:8.0
  name: mysql
  env:
  - name: MYSQL_ROOT_PASSWORD
    valueFrom:
      secretKeyRef:
        name: mysql-pass
        key: password
  # 新增以下配置,%表示允许所有IP访问,也可指定固定IP段
  - name: MYSQL_ROOT_HOST
    value: "%"

该参数仅在数据库初始化时生效,需要配合清理存量数据的操作一同执行。

  • 登录验证

所有配置生效后,执行以下命令测试登录即可:
mysql -u root -p<实际密码> -P 3306 -h <LoadBalancer外部IP>

内容的提问来源于stack exchange,提问作者gaurav agnihotri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:36:05