使用Deno+MySQL构建REST API时遇Got packets out of order错误求助
排查Deno连接MySQL出现
Got packets out of order错误的方案 这个Got packets out of order错误在Deno对接MySQL时挺常见的,我帮你梳理几个大概率能解决问题的方向:
1. 解决MySQL 8.0+的认证插件兼容性问题
如果你的MySQL版本是8.0及以上,默认的用户认证插件是caching_sha2_password,而很多早期的Deno MySQL模块对这个插件支持不好,会导致数据包顺序混乱。你可以通过以下操作切换root用户的认证方式:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY ''; FLUSH PRIVILEGES;
执行完后重启MySQL服务,再重新运行你的Deno代码试试。
2. 避免连接后切换数据库,直接指定目标库
你当前的代码先连接了testDatabase,又通过use Ponys切换数据库,这种操作可能会触发数据包顺序错误。建议直接在连接配置里指定目标数据库:
import { Client } from "https://deno.land/x/mysql/mod.ts"; const client = await new Client().connect({ hostname: "127.0.0.1", username: "root", port: 3306, db: "Ponys", // 直接指定要使用的数据库 password: "", }); // 删掉这行:await client.execute('use Ponys'); const students = await client.query('SELECT * FROM Students'); console.log(students); // 别忘了打印结果确认
3. 尝试使用更新的模块版本
你使用的https://deno.land/x/mysql/mod.ts可能是未指定版本的旧版,存在已知的数据包处理bug。试试锁定一个较新的稳定版本,比如:
import { Client } from "https://deno.land/x/mysql@v2.10.2/mod.ts";
新版本通常修复了很多兼容性问题,能大概率解决这类连接错误。
4. 确认MySQL服务的绑定地址
虽然你用了127.0.0.1,但还是检查下MySQL配置文件(my.cnf或my.ini)里的bind-address是否设置为127.0.0.1或者0.0.0.0,确保Deno能正常连接到本地MySQL服务。
内容的提问来源于stack exchange,提问作者twofeetmonster
相关产品推荐
相关产品推荐

