Sequelize连接OVH MySQL数据库报getaddrinfo ENOTFOUND错误如何解决?
问题原因与解决方案
你遇到的SequelizeHostNotFoundError: getaddrinfo ENOTFOUND错误本质是运行Express服务的环境无法解析你填写的数据库主机域名,PHP项目可以正常连接说明数据库本身、账号密码、域名都是有效的,问题出在Node运行环境的网络配置或OVH数据库的访问限制,可按以下步骤排查:
排查步骤
- 第一步:验证部署环境的DNS解析能力
在你部署Express服务的服务器终端执行nslookup dodobwtdodob.mysql.db,查看是否能返回正确的数据库IP地址:- 如果解析失败:可以直接将
db.config.js里的HOST字段替换为解析得到的IP,或者将服务器的DNS修改为公共DNS(如8.8.8.8、114.114.114.114)后重试。 - 如果解析成功:继续往下排查。
- 如果解析失败:可以直接将
- 第二步:检查OVH数据库的访问白名单
OVH的共享型MySQL数据库默认开启访问来源限制,你需要登录OVH控制台,进入对应数据库的配置页,将你部署Express服务的服务器公网IP添加到允许访问的白名单中。你之前的PHP项目可以正常连接,是因为PHP项目部署的服务器IP已经在白名单内。 - 第三步:调整Sequelize连接配置
你可以在Sequelize初始化参数中添加超时配置,避免连接超时被误判为解析失败,修改后的配置参考:
const sequelize = new Sequelize(dbConfig.DB, dbConfig.USER, dbConfig.PASSWORD, { host: dbConfig.HOST, dialect: dbConfig.dialect, port: dbConfig.port, pool: { max: dbConfig.pool.max, min: dbConfig.pool.min, acquire: dbConfig.pool.acquire, idle: dbConfig.pool.idle }, // 新增以下配置 dialectOptions: { connectTimeout: 60000 } });
如果你的Express服务和OVH数据库部署在同一区域,建议优先使用OVH提供的数据库内网连接地址替换公网域名,内网连接稳定性更高,不会出现公网DNS解析失败的问题。
针对VPS部署报连接被拒绝的补充说明
该问题90%以上的概率是两个原因:
- VPS的公网IP没有添加到OVH数据库的访问白名单
- VPS的出站防火墙规则禁止了3306端口的访问,你可以在VPS终端执行
telnet dodobwtdodob.mysql.db 3306验证端口连通性,若不通开放VPS的3306出站端口即可。
内容的提问来源于stack exchange,提问作者Dodoboulistick
相关产品推荐
相关产品推荐

