Node.js连接Railway MySQL遇超时及域名解析错误求助
Node.js + MySQL 部署Railway平台连接错误排查方案
针对 connect ETIMEDOUT 错误
- 核对Railway MySQL实例的连接凭据准确性:
- 确认主机地址(host)是Railway提供的完整域名,禁止使用
localhost或裸IP(Railway数据库默认通过域名访问) - 端口号默认是3306,不要随意修改
- 用户名、密码需与Railway控制台显示的数据库凭据完全一致,注意大小写、特殊字符的正确性
- 确认主机地址(host)是Railway提供的完整域名,禁止使用
- 检查Railway数据库的网络访问规则:
- Railway默认允许同项目内的服务访问数据库,若为外部测试,需确认是否开启公网访问(部署场景优先使用内部网络)
- 本地验证连通性:
- 用Railway提供的临时连接字符串,通过本地数据库工具(如Navicat、DBeaver)测试连接,确认凭据本身无问题
针对 getaddrinfo ENOTFOUND 错误
该错误为DNS解析失败,核心是数据库主机地址配置有误:
- 检查dotenv环境变量加载:
- 确认
.env文件中的DB_HOST是Railway提供的数据库完整域名,无拼写错误(如多/漏字符、遗漏域名后缀) - 确保代码中正确读取环境变量,比如用
process.env.DB_HOST,避免硬编码旧地址
- 确认
- 配置Railway平台环境变量:
- 部署时不要依赖本地
.env文件,需在Railway控制台的项目环境变量中添加所有数据库相关变量:DB_HOST、DB_USER、DB_PASSWORD、DB_NAME、DB_PORT - 确认Railway环境变量无空格、多余符号,尤其是主机地址字段
- 部署时不要依赖本地
- 检查mysql2连接池配置:
确保连接池参数正确读取环境变量,示例配置如下:
禁止将主机地址写为IP或错误域名const pool = mysql.createPool({ host: process.env.DB_HOST, user: process.env.DB_USER, password: process.env.DB_PASSWORD, database: process.env.DB_NAME, port: process.env.DB_PORT || 3306, waitForConnections: true, connectionLimit: 10, queueLimit: 0 });
通用排查步骤
- 修改环境变量后,必须重启Railway后端服务才能生效
- 查看Railway服务日志:在控制台日志中确认环境变量是否正确加载,是否输出错误的主机地址
- 确认Railway数据库实例处于运行状态:在控制台检查数据库服务状态,排查是否有异常停机情况
内容的提问来源于stack exchange,提问作者JonD
相关产品推荐
相关产品推荐

