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手动测试用户登录,确认用户和密码有效:
输入密码后如果能成功登录,说明用户本身没问题;如果登录失败,重新在cPanel或SQL CLI中配置用户权限:mysql -u niemer5_discordbot -p-- 授予本地访问权限(本地部署时用) 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
相关产品推荐
相关产品推荐

