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密码。
操作步骤:
- 删除已有的MySQL Deployment
- 清空PVC关联PV中的所有数据,或直接删除旧PVC、创建新PVC
- 应用修正后的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
相关产品推荐
相关产品推荐

