使用Node.js的MySQL X DevAPI报错:服务器未使用X协议
解决@mysql/xdevapi连接时的X Protocol错误
我来帮你搞定这个问题!你遇到的报错核心原因很明确:你代码里用的是传统MySQL协议的3306端口,但@mysql/xdevapi是专门基于MySQL X Protocol开发的连接器,它需要连接X Protocol的默认端口33060。
第一步:修改代码中的端口配置
把你的连接配置里的port从3306改成33060,修改后的代码如下:
const mysqlx = require('@mysql/xdevapi'); const dbCfg = { "host": "127.0.0.1", "port": 33060, // 这里改成X Protocol的默认端口 "password": "xxxxxxxxx", "user": "someuser", "schema": "someschema" }; mysqlx.getSession(dbCfg).then(session => { console.log("this is the session! ", session); });
为什么mysqlsh能正常连接?
mysqlsh是MySQL官方的Shell工具,它默认会优先尝试使用X Protocol连接33060端口,如果连接失败才会回退到传统协议的3306端口。所以你用相同参数能连,大概率是mysqlsh自动适配了正确的端口/协议,而你的Node.js代码明确指定了错误的端口。
额外排查点(如果改端口后还是报错)
- 检查MySQL配置文件(比如
my.cnf或my.ini)中的mysqlx_port参数,确认X Protocol的监听端口确实是33060(默认值是这个,但可能被修改过) - 在MySQL客户端执行
show variables like 'mysqlx_port';,验证当前生效的X Protocol端口 - 确认服务器防火墙没有拦截33060端口
- 检查你的数据库用户是否具备X Protocol的连接权限(不过你用mysqlsh能正常连接的话,这个权限应该是没问题的)
内容的提问来源于stack exchange,提问作者Angel Lubenov
相关产品推荐
相关产品推荐

