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

Ubuntu虚拟机终端Python脚本连接Azure MySQL数据库失败(socket.gaierror错误)

Ubuntu虚拟机终端Python脚本连接Azure MySQL数据库失败(socket.gaierror错误)

看起来你遇到的是典型的域名解析失败问题,从错误socket.gaierror: [Errno -2] Name or service not known就能明确判断——你的Python脚本没法把配置的MySQL主机名转换成对应的IP地址。结合你提到之前能从VM终端连接创建数据库、现在却连不上的情况,给你几个实用的排查和解决方向:

  • 先核对数据库连接参数里的hostname是否正确
    Azure MySQL的服务器名称格式固定为{你的服务器名}.mysql.database.azure.com,你需要仔细检查脚本里的hostname参数:有没有打错字符、漏写后缀,或者把服务器名称和数据库名称搞混了?
    可以先在VM终端里执行nslookup {你的Azure MySQL服务器全名}或者ping {你的Azure MySQL服务器全名}测试解析:如果返回“unknown host”,那肯定是hostname写错了;如果能正常解析出IP,再往下排查。

  • 检查VM的DNS配置是否正常
    有时候VM的DNS服务器故障会导致域名解析失败。你可以查看/etc/resolv.conf文件里的DNS服务器地址,尝试换成公共DNS(比如8.8.8.8),然后重启网络服务(Ubuntu 18.04及以上可以用sudo systemctl restart systemd-resolved,旧版本用sudo service networking restart),之后再重新运行脚本试试。

  • 再次确认Azure MySQL的防火墙与网络配置
    虽然你提到已经允许公共和Azure资源访问,但还是要再核对细节:

    • 登录Azure门户,找到你的MySQL服务器,进入「连接安全性」页面,检查防火墙规则是否包含当前VM的公网IP(或者临时添加0.0.0.0/0测试,但生产环境请勿长期保留这个规则);
    • 确认「允许访问Azure服务」的开关处于开启状态;
    • 另外,Azure MySQL默认使用3306端口,如果你修改过端口,脚本里必须添加port=xxx的参数,且端口号要以数字类型传入(不能是字符串)。
  • 排查MySQL连接器的参数格式问题
    从最后报错的%-.100s:%u提示来看,%u要求传入数字但实际传了字符串,可能是你把端口号写成了字符串类型(比如port="3306"而非port=3306),或者hostname参数里混入了异常字符?仔细检查连接参数的类型和内容是否正确。

  • 用IP地址直接测试连接
    如果域名解析问题一直无法解决,你可以先在Azure门户的MySQL服务器「概述」页面找到公网IP,把脚本里的hostname换成这个IP地址,尝试连接。如果能成功连上,就说明问题出在域名解析环节,需要进一步排查VM的DNS配置或者Azure的域名服务。

备注:内容来源于stack exchange,提问作者Mauyon Akinola

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 10:28:05