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

Minikube集群中Spring Boot Pod无法连接MySQL服务的问题排查

问题分析与解决方案

核心原因

没错,expense_manager_user仅映射到localhost主机正是导致连接失败的关键原因。

MySQL的用户权限采用**「用户名+主机」**的组合校验机制:expense_manager_user@localhost意味着该用户只能从MySQL容器内部的localhost发起连接,而你的Spring Boot应用运行在独立的Kubernetes Pod中(IP为10.244.0.70),属于外部主机,因此会被MySQL的权限系统拒绝访问。

修复步骤

1. 修正MySQL用户权限

进入MySQL Pod执行权限变更操作:

# 替换<mysql-pod-name>为实际的MySQL Pod名称,可通过kubectl get pods获取
kubectl exec -it <mysql-pod-name> -- mysql -uroot -ppassword

在MySQL控制台中执行:

-- 允许expense_manager_user从任意主机访问目标数据库
GRANT ALL PRIVILEGES ON expense_manager.* TO 'expense_manager_user'@'%' IDENTIFIED BY 'expense_manager_password';
-- 刷新权限使变更生效
FLUSH PRIVILEGES;
-- 验证权限是否生效,应能看到host为%的记录
SELECT user, host FROM mysql.user WHERE user='expense_manager_user';

2. 修正Spring Boot的数据库连接地址

你的MySQL Service名称为mysql-service,但Spring应用配置中使用的主机名是mysql,这会导致DNS解析失败。需要修改Deployment中的环境变量:

env:
  - name: SPRING_DATASOURCE_URL
    value: jdbc:mysql://mysql-service:3306/expense_manager

修改后重启Spring应用Deployment:

kubectl rollout restart deployment expense-manager-deployment

3. 处理持久化数据的潜在问题

由于你的MySQL使用了PersistentVolumeClaim(PVC)存储数据,若后续重启MySQL Pod,之前的权限变更会被PVC中的原有数据覆盖(因为MYSQL_USER等初始化环境变量仅在容器首次启动时生效)。

如果是测试环境,可删除PVC重新初始化:

kubectl delete pvc mysql-pv-claim
kubectl delete deployment mysql
kubectl apply -f <mysql-deployment-yaml-file>

内容的提问来源于stack exchange,提问作者Gyan-Lucifer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 14:53:40