Windows10下Deno连接MySQL8开机后权限拒绝问题求助
问题复现
Windows 10中使用Deno的https://deno.land/x/mysql@v2.12.1/mod.ts模块连接MySQL 8,重启系统后首次连接报错:
Uncaught (in worker "") (in promise) Error: Access denied for user 'root'@'localhost' (using password: YES) throw new Error(error.message);
使用MySQL Workbench连接一次后,Deno即可正常连接,直到下次重启。
解决方案
1. 替换连接地址为127.0.0.1
修改Deno的数据库连接配置,将host: 'localhost'改为host: '127.0.0.1',强制使用TCP/IP协议连接而非本地socket:
import { Client } from "https://deno.land/x/mysql@v2.12.1/mod.ts"; const client = await new Client().connect({ hostname: "127.0.0.1", // 替换原localhost username: "root", password: "你的密码", db: "你的数据库名", });
2. 修改MySQL用户认证插件
MySQL 8默认使用caching_sha2_password认证,部分客户端兼容性不佳。将root用户的认证方式改为mysql_native_password:
- 打开MySQL命令行(或通过Workbench进入SQL编辑器)
- 执行以下SQL命令:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的root密码'; FLUSH PRIVILEGES;
- 重启MySQL服务
3. 确保MySQL启动时监听TCP/IP
检查MySQL配置文件my.ini(通常位于C:\ProgramData\MySQL\MySQL Server 8.0\目录),在[mysqld]节点下添加或确认以下配置:
bind-address = 127.0.0.1 port = 3306
保存后重启MySQL服务,确保服务启动时正常监听TCP/IP端口。
原因分析
重启后MySQL默认可能未初始化TCP/IP监听,或caching_sha2_password认证与Deno的mysql模块存在兼容性问题。Workbench连接时会触发MySQL加载TCP/IP监听或临时适配认证方式,而修改上述配置可永久解决该触发依赖。
内容的提问来源于stack exchange,提问作者lviggiani

