MySQL连接JS报错ER_NOT_SUPPORTED_AUTH_MODE及ER_HOST_NOT_PRIVILEGED求助
MySQL与JavaScript连接报错解决方案
一、解决ER_NOT_SUPPORTED_AUTH_MODE错误
该错误因MySQL 8.0+默认采用caching_sha2_password认证插件,而你使用的mysql客户端库不支持此认证方式,可通过以下两种方式解决:
方法1:修改MySQL用户认证方式
登录MySQL命令行,执行以下SQL命令:
USE mysql; -- 替换为你的实际密码,修改root用户的认证方式为兼容旧客户端的mysql_native_password ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的数据库密码'; FLUSH PRIVILEGES;
修改后保持代码中host: 'localhost',重新运行连接代码即可。
方法2:更换支持新认证的客户端库
若不想修改MySQL配置,可替换为mysql2库(支持caching_sha2_password):
- 卸载旧库:
npm uninstall mysql
- 安装新库:
npm install mysql2
- 修改连接代码:
const mysql = require('mysql2'); var mysqlConnection = mysql.createConnection({ host: 'localhost', user:'root', password:'你的数据库密码', database:'EmployeeDB' }); mysqlConnection.connect((err) => { if (!err) console.log('DB Connection Succeded'); else console.log('DB Connection Failed \n Error :'+ JSON.stringify(err, undefined, 2)); });
二、解决ER_HOST_NOT_PRIVILEGED错误
此错误是因为修改主机名后,当前主机(Mistycyrus.bbrouter)未被MySQL授权访问,处理步骤如下:
- 登录MySQL命令行,执行授权命令:
-- 允许root用户从Mistycyrus.bbrouter主机访问EmployeeDB库,替换为你的密码 GRANT ALL PRIVILEGES ON EmployeeDB.* TO 'root'@'Mistycyrus.bbrouter' IDENTIFIED BY '你的数据库密码'; -- 若需允许所有主机访问(仅测试环境使用,生产环境禁用) -- GRANT ALL PRIVILEGES ON EmployeeDB.* TO 'root'@'%' IDENTIFIED BY '你的数据库密码'; FLUSH PRIVILEGES;
- 代码中
host字段对应设置为Mistycyrus.bbrouter,或保持localhost(本地连接优先使用此值,避免解析问题)。
额外注意事项
- 确认MySQL服务处于运行状态,可通过系统服务管理工具检查(如Windows服务、Linux的
systemctl status mysql)。 - 确保代码中密码与MySQL用户密码完全一致。
- 本地连接优先使用
localhost,减少主机名解析异常概率。
内容的提问来源于stack exchange,提问作者Arun Khandelwal
相关产品推荐
相关产品推荐

