Node服务器请求VPS上的MariaDB数据库出现连接超时如何解决
问题排查与解决步骤
修正重复导出错误
你的database.js文件存在两次module.exports赋值,后面的module.exports = pool会直接覆盖前面定义的getConnection导出对象,冗余代码建议删除,仅保留你实际需要使用的导出逻辑即可。修正环境变量拼写错误
连接池配置中数据库名的环境变量存在拼写错误,你写的是process.env.DATABSE_NAME,缺少一个字母A,正确应为process.env.DATABASE_NAME,拼写错误会导致连接时无法匹配到目标数据库,直接触发超时。修正路由错误处理逻辑
路由代码的catch块中你直接throw err,没有做异常兜底也没有给请求方返回响应,会直接导致服务崩溃,修改为如下逻辑即可避免服务直接退出:catch (err) { console.error('数据库操作失败: ', err) res.status(500).send({ code: 500, msg: '服务内部错误', error: err.message }) }校验网络与权限配置
phpMyAdmin通常和MariaDB部署在同一台VPS上,走本地连接自然正常,你需要额外校验:- VPS的防火墙是否开放了MariaDB默认3306端口,是否允许你本地的公网IP访问该端口
- 你创建的MariaDB用户的host配置是否为
%(允许所有IP访问)或你本地的公网IP,而非仅允许localhost访问 process.env.DATABASE_HOST是否填写了VPS的公网IP,而非本地回环地址
可选的连接池配置优化
排查阶段可以给连接池加上明确的超时、端口配置,方便定位问题:const pool = mariadb.createPool({ host: process.env.DATABASE_HOST, port: 3306, // 如果你修改过MariaDB端口就填对应的端口号 user: process.env.DATABASE_USER, password: process.env.DATABASE_PASSWORD, database: process.env.DATABASE_NAME, acquireTimeout: 30000, // 把获取连接的超时时间拉长到30秒 connectionLimit: 10 });
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

