必须同时安装sqltools和sqltools mysql/mariadb driver插件,前者提供界面,后者实现tcp连接;host、port、user、password、database五项需严格匹配mysql实际配置,localhost在docker/wsl2/m1等场景下常需替换为真实ip或127.0.0.1。

VSCode里装什么插件才能直接连MySQL?
不能只装一个插件就完事。必须同时安装 SQLTools 和它的驱动 SQLTools MySQL Driver,缺一不可。前者是管理界面,后者才是真正建立TCP连接的底层适配器。
常见错误现象:装了 SQLTools 但点“+”添加连接时,下拉列表里没有 MySQL 选项——说明 SQLTools MySQL Driver 没装或没启用。
- 打开 VSCode 的 Extensions 面板(
Ctrl+Shift+X或Cmd+Shift+X) - 先搜
SQLTools,安装并重启 VSCode - 再搜
SQLTools MySQL Driver,安装(不用重启) - 左侧活动栏出现
SQLTools图标,点击后看到 “+ Add Connection”,才说明环境就绪
连接配置里哪些字段最容易填错?
host、port、user、password、database 这五项必须和 MySQL 实际运行状态严格一致,尤其注意:
-
host填localhost时,MySQL 必须允许本地 socket 或 TCP 连接;如果用 Docker 或远程服务器,得填真实 IP 或容器名(比如192.168.1.100或mysql-container) -
port默认是3306,但如果你改过 MySQL 配置文件(/etc/mysql/my.cnf或my.ini),这里必须同步修改 -
user不一定是root;如果用的是普通账号,要确认该账号有对应database的访问权限(执行SHOW GRANTS FOR 'your_user'@'host';可查) -
password如果含特殊字符(如@、/、:),在 URL 形式连接中需做 URL encode,但 VSCode 插件配置界面会自动处理,不用手动编码
为什么 Node.js 项目里还要单独装 mysql2?
VSCode 插件的连接是纯 SQL 查询工具链,和你的 Node.js 运行时完全隔离。它不参与 require('mysql2') 的加载过程,也不影响 connection.query() 执行。
MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。
换句话说:SQLTools 是给你「看」和「试」SQL 的,而 mysql2 是让你代码「真正跑起来」连库的。两者职责不同,必须分别配置。
- 项目中必须运行:
npm install mysql2(比mysql更快、支持 Promise、更稳定) - 连接池配置建议加
waitForConnections: true和queueLimit: 0,避免高并发时抛Handshake in progress - 别把密码硬编码进
db.js;用process.env.DB_PASSWORD+.env文件管理更安全 - 测试连接是否生效,不要只靠
console.log('connected');加一句pool.query('SELECT 1', cb)真实走通一次查询
Node 启动时报 ECONNREFUSED 或 ER_ACCESS_DENIED_ERROR 怎么快速定位?
这两个错误几乎都来自网络层或权限层,和 VSCode 插件无关,优先检查这三件事:
- MySQL 服务是否真的在运行?Linux/macOS 执行
sudo systemctl status mysql或brew services list | grep mysql;Windows 查任务管理器里的mysqld.exe - 防火墙是否放行
3306端口?特别是 macOS Monterey 及更新版本,默认开启防火墙,需手动允许 - 用户权限是否绑定到正确 host?
root@localhost和root@127.0.0.1在 MySQL 里是两个不同账号;用SELECT User, Host FROM mysql.user;查清实际匹配规则
复杂点在于:MySQL 的 bind-address 默认可能是 127.0.0.1,导致 localhost 走 socket、127.0.0.1 走 TCP,行为不一致;调试时统一用 127.0.0.1 可减少歧义。










