Kubernetes部署MySQL未生效Secret中设置的root密码问题求助
MySQL root密码配置不生效问题解决方案
核心原因排查&解决步骤
第一步:验证密码环境变量是否正确注入
首先进入Pod验证环境变量值是否符合预期:kubectl exec -it <替换为你的MySQL Pod名称> -n gitea -- printenv MYSQL_ROOT_PASSWORD输出应为
password123,说明Secret解码和注入逻辑正常,你提供的配置中这一步本身是符合预期的。第二步:处理旧持久化数据导致的密码不更新问题
MySQL官方容器的初始化逻辑仅在**/var/lib/mysql目录为空(首次启动)**时读取MYSQL_ROOT_PASSWORD设置root密码,后续启动不会修改已存在的数据库用户配置,这是90%以上此类问题的根因:- 先缩容Deployment停止MySQL运行:
kubectl scale deployment gitea-mysql -n gitea --replicas=0- 分两种场景处理:
- 无需保留旧数据:直接删除对应PVC,重新创建PVC后再把Deployment副本数扩为1即可,新初始化的数据库会使用当前Secret配置的密码
kubectl delete pvc mysql-pvc -n gitea # 重新创建PVC后执行 kubectl scale deployment gitea-mysql -n gitea --replicas=1- 需要保留旧数据:先把Deployment扩回1,进入容器手动修改root密码:
# 进入容器本地登录MySQL kubectl exec -it <替换为你的MySQL Pod名称> -n gitea -- mysql -u root # 执行修改密码命令 ALTER USER 'root'@'localhost' IDENTIFIED BY 'password123'; FLUSH PRIVILEGES;
第三步:解决root用户远程登录限制问题
MySQL 8默认root用户仅允许localhost本地登录,且默认认证插件为caching_sha2_password,很多旧客户端不支持,会导致外部访问时提示密码错误,实际是权限或认证协议问题:- 本地登录MySQL后执行以下命令开放root远程访问权限并适配旧客户端认证协议:
UPDATE mysql.user SET host='%' WHERE user='root' AND host='localhost'; ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password123'; FLUSH PRIVILEGES;第四步:排查冲突的环境变量
检查Deployment的env配置中是否存在MYSQL_RANDOM_ROOT_PASSWORD、MYSQL_ALLOW_EMPTY_PASSWORD等变量,这类变量优先级高于MYSQL_ROOT_PASSWORD,存在的话删除即可。
内容的提问来源于stack exchange,提问作者Muji Sayed
相关产品推荐
相关产品推荐

