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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:36:01