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

Kubernetes集群内Job无法连接MySQL服务执行EF数据库迁移

问题排查与解决方案

1. 修复MySQL连接串格式错误

C# MySQL驱动(MySql.Data/MySqlConnector)不支持在server参数后直接拼接冒号+端口,端口需要通过独立的port参数指定,你之前所有的连接串写法都不符合驱动要求,这是最高概率的故障原因。
正确连接串写法如下:

server=mysql.default.svc.cluster.local;port=3306;uid=myUser;pwd=myPassword;database=myDatabase

如果Job和MySQL服务在同一个命名空间下,可直接简写服务名:

server=mysql;port=3306;uid=myUser;pwd=myPassword;database=myDatabase

修改Job的CONNECTION_STRING环境变量后重新运行Job即可测试。

2. 验证MySQL用户远程访问权限

如果修改连接串后仍报错,检查MySQL用户的访问权限配置:

  1. 本地端口转发连接到MySQL,执行SQL命令:
SELECT host, user FROM mysql.user WHERE user='myUser';
  1. 如果返回结果中host字段只有localhost/127.0.0.1,说明该用户仅允许本地登录,执行授权命令开放集群访问权限:
GRANT ALL PRIVILEGES ON myDatabase.* TO 'myUser'@'%';
FLUSH PRIVILEGES;

%代表允许任意来源IP访问,生产环境可替换为集群Pod网段缩小权限范围。

3. 排查集群网络连通性

上述步骤都无效的情况下,验证集群内部网络连通性:

  • 在Job所在的命名空间启动临时测试Pod执行连接测试:
kubectl run -it --rm --image=mysql:8.0 --restart=Never mysql-client -- mysql -h mysql.default.svc.cluster.local -P 3306 -u myUser -pmyPassword
  • 如果测试Pod可以正常连接,说明网络无问题,故障出在迁移镜像的配置上,可检查EF Core MySQL Provider版本是否与.NET 5匹配;如果测试Pod也无法连接,依次排查:
    • 执行kubectl describe svc mysql查看Endpoints字段是否存在正常的MySQL Pod IP,确认Service的selector和Deployment标签匹配
    • 检查集群是否存在NetworkPolicy规则禁止了对MySQL 3306端口的访问
    • 确认minikube的CoreDNS服务运行正常

4. 补充兼容配置

MySQL 8.0默认启用SSL认证,测试环境可在连接串中添加SslMode=None跳过SSL校验,避免认证失败问题。

内容的提问来源于stack exchange,提问作者Tomasz Sikora

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:54:03