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

Azure部署Node.js后端MySQL查询报错排查求助

Node.js后端Azure环境下MySQL查询失败问题排查与解决

问题场景

我采用Node.js后端+React前端构建项目,使用外部MySQL数据库,通过Azure静态Web应用部署至Microsoft Azure。后端部署在F1共享免费App Service上,本地环境中数据库查询可正常运行,但Azure环境下执行数据库查询时出现错误,相关核心代码如下:

router.post("/adminlogin", (req, res) => {
    const sql = "SELECT * FROM admin WHERE email = ? AND password = ?";
    con.query(sql, [req.body.email, req.body.password], (err, result) => {
        if (err) {
            console.error("Query error:", err);
            return res.json({ loginStatus: false, Error: "Query error", Details: err.message });
        }
        if (result.length > 0) {
            const email = result[0].email;
            const token = jwt.sign(
                { role: "admin", email: email, id: result[0].id },
                "jwt_secret_key",
                { expiresIn: "1d" }
            );
            res.cookie('token', token);
            return res.json({ loginStatus: true });
        } else {
            return res.json({ loginStatus: false, Error: "Wrong email or password" });
        }
    });
});

可能的错误原因

  • 数据库防火墙白名单限制:外部MySQL数据库未将Azure App Service的出站IP地址加入访问白名单,本地IP在白名单内可正常连接,而Azure服务器IP被拦截。
  • 环境变量配置错误:本地使用的数据库连接参数(主机、账号、密码等)正确,但Azure App Service的应用设置中未配置正确的环境变量,或代码中硬编码了本地连接信息。
  • 数据库账号权限不足:Azure环境中使用的数据库账号缺少admin表的查询权限,或账号密码配置错误。
  • App Service网络配置异常:若启用了VNet集成、私有端点等网络功能,未正确配置路由或DNS解析,导致后端无法访问外部数据库。

解决步骤

1. 配置数据库防火墙白名单

  • 登录Azure门户,进入目标App Service的「网络」→「出站IP地址」,复制所有列出的IP地址。
  • 登录外部MySQL数据库的管理平台,将上述IP地址添加至防火墙白名单,允许访问3306端口(MySQL默认端口)。

2. 核对Azure环境变量配置

  • 在App Service的「配置」→「应用程序设置」中,添加数据库连接相关的环境变量,例如:
    • DB_HOST:数据库主机地址
    • DB_USER:数据库登录账号
    • DB_PASSWORD:数据库登录密码
    • DB_NAME:目标数据库名称
    • DB_PORT:数据库端口(默认3306)
  • 修改代码,从环境变量读取连接参数,避免硬编码:
    const mysql = require('mysql');
    const con = mysql.createConnection({
      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
    });
    

3. 验证数据库账号权限

  • 使用Azure环境中配置的数据库账号,通过本地数据库工具(如MySQL Workbench)连接数据库,执行相同的SELECT查询,确认账号具备admin表的查询权限,且密码正确。

4. 检查App Service网络设置

  • 若启用了VNet集成,确认VNet与外部数据库的网络连通性,必要时配置网络安全组(NSG)规则允许出站访问3306端口。
  • 若使用私有端点,检查私有DNS区域是否正确解析数据库主机名,确保网络路由正常。

5. 查看Azure日志定位细节

  • 进入App Service的「日志」→「日志流」,查看实时错误日志,根据返回的err.message(如连接超时、权限拒绝等)针对性处理问题。

内容的提问来源于stack exchange,提问作者Nikhil Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 18:55:00