Kubernetes连接MySQL报错:无法通过套接字连接本地MySQL服务器
解决Kubernetes Minikube中MySQL连接报错ERROR 2002的问题
问题原因
你执行mysql -u root -padmn -P3306时未指定连接主机,默认会尝试通过本地Unix socket文件/var/run/mysqld/mysqld.sock连接,但:
- 如果是在应用Pod中执行该命令:应用Pod内未安装MySQL服务,不存在这个socket文件
- 即使在MySQL Pod内执行,部分场景下MySQL服务可能未绑定到socket,或者需要显式指定TCP连接
另外,你的Secret中存储的密码存在格式问题:YWRtaW4K解码后是admin\n(包含换行符),可能导致后续认证失败。
解决步骤
1. 修正MySQL连接命令
无论在应用Pod还是MySQL Pod中,显式指定主机地址(使用Kubernetes Service域名):
mysql -u root -padmn -h mysql -P3306
mysql是你定义的Service名称,Kubernetes DNS会自动将其解析为MySQL Pod的IP地址
2. 修复Secret中的密码格式
当前Secret里的密码包含换行符,重新生成无换行的base64编码值:
# 生成admin的base64编码(无换行) echo -n "admin" | base64
得到YWRtaW4=,替换mysql-secret.yaml中的对应值,然后重新应用:
kubectl apply -f mysql-secret.yaml
3. 验证MySQL服务状态
- 检查Pod是否正常运行:
确保状态为kubectl get pods -l app=mysqlRunning - 查看MySQL Pod日志,确认服务启动成功:
日志中出现kubectl logs <mysql-pod-name>ready for connections则说明服务正常
4. 确认网络可达性
在应用Pod中执行ping命令,验证是否能解析MySQL Service:
ping mysql -c 3
如果能正常解析并收到响应,说明Kubernetes DNS和网络连通性正常
额外说明
- Kubernetes Pod是隔离的运行环境,本地主机的MySQL安装/卸载不会影响Pod内的操作,之前Ubuntu虚拟机运行正常是因为连接命令或环境配置正确
- 你的YAML配置文件整体结构没问题,Service和Deployment的关联、存储卷配置都符合规范,只需修正连接方式和Secret密码格式
内容的提问来源于stack exchange,提问作者stirling
相关产品推荐
相关产品推荐

