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

Node.js连接MySQL遇1045错误:Discord机器人数据库连接求助

解决MySQL连接ER_ACCESS_DENIED_ERROR问题

从错误信息Access denied for user 'niemer5_discordbot'@'localhost' (using password: NO)可以看出核心问题:程序未正确传递数据库密码,同时连接配置存在拼写错误,以下是分步解决方法:

1. 修正连接配置的拼写错误

你的代码里存在两处关键拼写错误,直接导致数据库连接参数异常:

const con = mysql.createConnection({
    host: process.env.HOST,
    port: process.env.PORT,
    user: process.env.MYSQLUSER,
    // 错误1:字段名应为database,不是db
    // 错误2:环境变量名应为DATABASE,少了一个字母
    database: process.env.DATABASE, 
    password: process.env.MYSQLPASSWORD,
});

修正后确保字段名和环境变量名完全匹配。

2. 验证环境变量是否正确加载

  • 确认项目根目录下的.env文件中,变量名和代码里的完全一致,示例.env内容:
    HOST=localhost
    PORT=3306
    MYSQLUSER=niemer5_discordbot
    DATABASE=your_database_name
    MYSQLPASSWORD=your_actual_password
    
  • 在连接代码前添加调试语句,检查密码是否正确读取:
    console.log("Loaded password:", process.env.MYSQLPASSWORD);
    
    如果输出undefined,说明.env文件未被正确加载:
    • 确认require('dotenv').config()没有指定错误路径(如果.env不在根目录,需传入path参数,比如require('dotenv').config({ path: './config/.env' }))
    • 确认.env文件没有语法错误,比如变量名前后不能有空格,值不需要加引号(除非值里有特殊字符)

3. 验证MySQL用户权限与登录能力

  • 先通过MySQL CLI手动测试用户登录,确认用户和密码有效:
    mysql -u niemer5_discordbot -p
    
    输入密码后如果能成功登录,说明用户本身没问题;如果登录失败,重新在cPanel或SQL CLI中配置用户权限:
    -- 授予本地访问权限(本地部署时用)
    GRANT ALL PRIVILEGES ON your_database_name.* TO 'niemer5_discordbot'@'localhost' IDENTIFIED BY 'your_password';
    -- 授予远程访问权限(远程连接时用,替换为你的IP或%允许任意IP)
    GRANT ALL PRIVILEGES ON your_database_name.* TO 'niemer5_discordbot'@'your_client_ip' IDENTIFIED BY 'your_password';
    -- 刷新权限
    FLUSH PRIVILEGES;
    

4. 推荐替换为mysql2库

原mysql库已停止维护,建议改用mysql2,兼容性更好且更稳定:

npm uninstall mysql
npm install mysql2

代码中仅需修改引入语句,其余连接逻辑不变:

const mysql = require('mysql2');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 23:45:35