VSCode需通过MySQL扩展连接数据库,不支持SSH/SSL;本地连接须区分host与socketPath,注意MySQL 8.0认证插件兼容性及M系列Mac的socket路径。

VSCode里没有内置MySQL连接功能
VSCode本身不带数据库客户端,所谓“连接MySQL”,其实是靠扩展(extension)搭桥。最常用的是 MySQL 扩展(作者:cweijan),但注意它只支持本地 socket 或 TCP 连接,不支持 SSH 隧道、SSL 加密等进阶方式——如果你的 MySQL 开在 Docker 里、或绑定了 127.0.0.1 而非 localhost,这里就容易连不上。
常见错误现象:Connection refused、Access denied for user、点开连接后空白无响应。
- 确认 MySQL 服务确实在运行:
sudo systemctl status mysql(Linux/macOS)或任务管理器里看mysqld.exe(Windows) - 检查用户权限:默认
root@localhost可能被禁用远程登录,但 VSCode 是本地连接,所以重点看是否允许localhost登录,执行SELECT host, user FROM mysql.user;确认存在localhost行 - 密码为空时别留空格;含特殊字符(如
@、/)要 URL 编码(比如@→%40)
配置 connection.json 文件的几个关键字段
装好 MySQL 扩展后,按 Ctrl+Shift+P(Win/Linux)或 Cmd+Shift+P(macOS),输入 MySQL: Add Connection,会引导你填表——但更稳的方式是手动编辑 .vscode/connection.json(项目根目录下),因为图形界面有时会漏掉端口或 socket 路径。
本地连接最常踩的坑是混淆 host 和 socketPath:
- 如果 MySQL 启动时用了
--socket=/tmp/mysql.sock(macOS/Linux 常见),必须填"socketPath": "/tmp/mysql.sock",此时host字段得删掉或设为null,否则扩展会强行走 TCP - 如果填了
host: "localhost",MySQL 默认尝试 Unix socket;但填host: "127.0.0.1"就强制走 TCP,端口才生效(默认3306) -
database字段可空,但留空后无法直接展开表树,得手动USE xxx;
查询执行失败:不是语法问题,而是连接上下文没生效
写完 SQL 点右键 Run Query 报错 ERROR 1046 (3D000): No database selected?不是语句错了,是当前连接没绑定默认库。
这个扩展不会自动继承你在连接配置里写的 database 字段值——只有当你双击连接名进入后,再点开某张表、或执行带 USE 的语句,后续查询才会有上下文。
- 快速补救:先执行
USE mydb;,再跑其他SELECT - 想省事:在
connection.json里明确写上"database": "mydb",然后重新添加该连接(不是刷新) - 注意:扩展不支持多语句分号批量执行(比如
CREATE TABLE; INSERT INTO;),一次只能跑一个语句
Mac M系列或新版MySQL 8.0+ 的兼容性细节
MySQL 8.0 默认认证插件从 mysql_native_password 改成 caching_sha2_password,而 VSCode 的 MySQL 扩展(截至 v2023.12)仍只支持前者——连不上时大概率是这个原因。
验证方法:登录 MySQL 终端,执行 SELECT user, host, plugin FROM mysql.user WHERE user='your_user';,如果 plugin 是 caching_sha2_password,就得改。
- 临时方案:创建新用户并指定旧插件:
CREATE USER 'vscode'@'localhost' IDENTIFIED WITH mysql_native_password BY 'pwd'; - 永久方案(不推荐):改配置文件
my.cnf,加default_authentication_plugin=mysql_native_password,再重启 MySQL - M系列 Mac 用户注意:Homebrew 安装的 MySQL 可能 socket 路径是
/opt/homebrew/var/mysql/mysql.sock,不是/tmp/mysql.sock
复杂点在于:同一个 MySQL 实例可能同时存在多种认证方式,不同用户、不同 host 绑定的 plugin 可以不一样,所以别只查 root,要查你实际用的那个用户。











