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

WSL2中使用mysql2无法连接Azure MySQL数据库的问题及解决

问题原因与解决方案

核心原因

mysql2库在WSL2(Ubuntu)环境下的SSL连接配置逻辑与原生mysql客户端不一致。Azure MySQL强制要求SSL连接:

  • Win11环境中系统证书存储包含Azure所需的根证书,mysql2能自动完成SSL验证,因此连接正常;
  • WSL2的Ubuntu环境默认未导入该根证书,且mysql2默认的SSL验证逻辑比原生mysql客户端更严格,导致连接失败。而原生mysql客户端连接时会自动适配兼容配置,所以能成功连接。

解决步骤

1. 先确认具体错误类型

修改代码中的异常捕获块,打印完整错误信息,定位是否为SSL相关问题:

async function init() {
  try {
    const connection = await pool.getConnection();
    console.log("Connected to the MySQL server.");
    connection.release();
  } catch (error) {
    console.error("完整错误信息:", error); // 替换原有的仅打印message的逻辑
  }
}

运行后若看到UNABLE_TO_VERIFY_LEAF_SIGNATURE或SSL connection error类提示,即可确认是SSL验证问题。

2. 调整mysql2的SSL连接配置

有两种方案可选:

方案一:临时关闭证书验证(仅测试环境使用)

在连接池配置中添加SSL选项,关闭证书验证:

const pool = mysql.createPool({
  host: "host.mysql.database.azure.com",
  user: "user",
  password: "password",
  database: "db",
  port: 3306,
  waitForConnections: true,
  connectionLimit: 10,
  queueLimit: 0,
  ssl: { rejectUnauthorized: false } // 添加该行配置
});

方案二:配置官方根证书(生产环境推荐)

  1. 在WSL2的Ubuntu中下载Azure MySQL所需的DigiCert根证书:
wget https://cacerts.digicert.com/DigiCertGlobalRootCA.crt.pem -P /usr/local/share/ca-certificates/
  1. 更新系统证书存储:
sudo update-ca-certificates
  1. 修改mysql2连接配置,指定证书路径:
const fs = require("fs");
const pool = mysql.createPool({
  host: "host.mysql.database.azure.com",
  user: "user",
  password: "password",
  database: "db",
  port: 3306,
  waitForConnections: true,
  connectionLimit: 10,
  queueLimit: 0,
  ssl: { ca: fs.readFileSync("/usr/local/share/ca-certificates/DigiCertGlobalRootCA.crt.pem") }
});

3. 验证连接

修改配置后重新运行代码,即可正常连接Azure MySQL。

内容的提问来源于stack exchange,提问作者No Ting

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 07:52:22