Mac Docker Desktop的K8s集群中MySQL无法登录问题咨询
问题分析与修复方案
嘿,我一眼就揪出问题所在了——你的MySQL密码配置里藏了个隐形的换行符!
先看你Secret里的mysql-root-password值:cm9vdAo=,咱们解码看看:
echo "cm9vdAo=" | base64 -d
输出是root后面跟着一个换行符(root\n)。也就是说,MySQL实际使用的密码是带换行的root\n,但你输入的是纯root,这当然会被拒绝啦!
为什么会出现这个问题?
你应该是用echo "root" | base64生成的编码,而默认情况下echo会在输出末尾自动加换行符,导致编码结果包含了这个多余的换行。正确的生成方式应该用echo -n "root" | base64,这样就不会额外添加换行。
具体修复步骤
- 先删掉现有的有问题的Secret:
kubectl delete secret mysql - 重新生成正确的base64编码(不带换行):
这次得到的结果应该是echo -n "root" | base64cm9vdA==(注意末尾是两个等号)。 - 修改你的
mysql.yaml里的Secret部分,把密码字段换成新的编码:apiVersion: v1 kind: Secret metadata: name: mysql type: Opaque data: mysql-root-password: cm9vdA== - 重新应用配置:
或者更快捷的方式:直接删掉当前的MySQL Pod,Deployment会自动拉取新的Pod使用更新后的Secret:kubectl apply -f mysql.yamlkubectl delete pod mysql-6c794ccb7b-dz9f4
额外注意点
如果重新创建Pod后还是登录失败,那大概率是之前的PersistentVolume已经存储了初始化后的MySQL数据(MySQL第一次启动时会把密码写入存储卷,之后不会再读取环境变量)。这种情况下,你需要删除现有的PVC,让K8s重新分配一个干净的存储卷:
kubectl delete pvc mysql
然后再重新应用配置文件,MySQL会重新初始化,使用新的正确密码。
等新Pod跑起来后,再进去执行mysql -u root -p,输入root就可以正常登录啦!
内容的提问来源于stack exchange,提问作者user11464063
相关产品推荐
相关产品推荐

