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

MySQL8.4+Express用caching_sha2_password报错:mysql_native_password未加载

问题描述

我刚开始使用MySQL 8.4,在Express后端通过mysql2连接数据库。数据库中用户认证类型为caching_sha2_password,且已确认默认认证类型设置为该值,但使用Postman调用接口时却报错:Plugin 'mysql_native_password' is not loaded。请问该mysql_native_password来自何处?

我曾尝试将默认认证类型改回mysql_native_password,但不仅安全性更低,还引发了新的错误;也试过卸载重装mysql2,但问题依旧。

数据库配置与连接代码

config.ts

export const DB_CONFIG = {
    db: {
      host: process.env.DB_HOST,
      user: process.env.DB_USER,
      password: process.env.DB_PASSWORD,
      database: process.env.DB_NAME,
      connectTimeout: 60000,
      multipleStatements: true,
    },
    listPerPage: 10,
  };

db.ts

import mysql from "mysql2/promise";
import { DB_CONFIG } from "../utils/config";

export default async function query(sql: any, params: any) {
  try {
    const connection = await mysql.createConnection(DB_CONFIG.db);
    const [results] = await connection.execute(sql, params);

    console.log("Database configuration:", connection);

    return Array.isArray(results) ? results : [results];
  } catch (error) {
    console.error("Database query error:", error);
    throw error;
  }
}
问题分析与解决

mysql_native_password的来源

这个错误里的mysql_native_password,核心原因是实际连接的数据库用户或mysql2连接逻辑在尝试使用该旧认证插件,具体场景包括:

  • 你以为配置的用户用了caching_sha2_password,但实际创建/修改用户时未指定插件,或被意外改成了mysql_native_password;
  • 环境变量DB_USER对应的用户,在MySQL中的认证插件就是mysql_native_password,和你设置的默认认证类型无关;
  • mysql2未被明确指定认证插件时,会优先尝试旧的mysql_native_password插件,而你的环境中该插件未加载或不可用。

排查与解决步骤

  1. 确认目标用户的认证插件
    登录MySQL执行以下命令,检查你使用的数据库用户对应的认证插件:
SELECT user, host, plugin FROM mysql.user WHERE user = '你的用户名';

如果结果中plugin列是mysql_native_password,需要修改用户的认证插件:

ALTER USER '你的用户名'@'你的主机' IDENTIFIED WITH caching_sha2_password BY '你的密码';
FLUSH PRIVILEGES;

注意替换命令中的用户名、主机(如localhost或%)、密码。

  1. 强制mysql2使用指定认证插件
    在db配置中显式添加authPlugin参数,强制mysql2使用caching_sha2_password,避免默认尝试旧插件:
    修改config.ts的db配置:
export const DB_CONFIG = {
    db: {
      host: process.env.DB_HOST,
      user: process.env.DB_USER,
      password: process.env.DB_PASSWORD,
      database: process.env.DB_NAME,
      connectTimeout: 60000,
      multipleStatements: true,
      authPlugin: 'caching_sha2_password' // 新增该行
    },
    listPerPage: 10,
  };
  1. 验证环境变量正确性
    确认process.env.DB_USER确实指向你配置了caching_sha2_password的用户,避免因环境变量配置错误,连接了其他使用旧插件的用户。

内容的提问来源于stack exchange,提问作者Eric Carey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 12:33:26