Ubuntu下Knex.js连接MySQL出现1045访问拒绝错误求助
解决MySQL ER_ACCESS_DENIED_ERROR (1045) 问题
你的错误信息显示连接使用的是root@localhost且未提供密码,但你的Knex配置里明确指定了personal_user,这说明实际发起连接的用户和配置不符,或者配置未生效。按以下步骤排查:
确认Knex配置是否生效
检查代码中有没有其他地方覆盖了Knex的连接配置,或是误写了连接逻辑(比如硬编码使用root用户发起连接)。可以在导出Knex实例前打印配置,确认使用的是personal_user:const knexConfig = { client: 'mysql', connection: { host : 'localhost', port : 3306, user : 'personal_user', password : 'personal_password', database : 'database_name' } }; console.log('Knex连接配置:', knexConfig.connection); // 打印配置确认 const knex = require('knex')(knexConfig); module.exports = knex;验证
personal_user用户的合法性
你之前修改的是root用户的密码,但连接用的是personal_user,这个用户可能不存在或权限不足:- 登录MySQL(用root用户):
mysql -u root -p - 查看是否存在
personal_user@localhost:SELECT user, host FROM mysql.user; - 如果用户不存在,创建并授权:
CREATE USER 'personal_user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'personal_password'; GRANT ALL PRIVILEGES ON database_name.* TO 'personal_user'@'localhost'; FLUSH PRIVILEGES; - 测试直接用
personal_user登录:
输入密码后尝试访问目标数据库:mysql -u personal_user -pUSE database_name;,如果能成功,说明用户权限没问题。
- 登录MySQL(用root用户):
检查密码和连接参数
确认Knex配置中的password和你设置的personal_user密码完全一致,注意大小写、特殊字符的拼写;同时确认host为localhost(错误提示显示连接的是localhost,无需修改)。
内容的提问来源于stack exchange,提问作者David Shu
相关产品推荐
相关产品推荐

