当前位置: 首页 > news >正文

Laravel5+mycat 报错 “Packets out of order”

背景

  • 近期对负责项目,配置了一套 主从复制的 MySQL 集群
    使用了中间件 mycat
    但测试发现,替换了原来的数据连接后,会出现 Packets out of order 的报错

同时注意到,有的框架代码中竟然也会失效,比如 controller 类中,获取 $request->all() 竟然变空了

分析、排查

  • 首先,切换 mycat 后,程序报错的一段源码如下:
[2024-07-04 10:48:58] local.ERROR: Packets out of order. Expected 1 received 5. Packet size=85 (SQL: select `cms_password_resets`.*  where `memberid` = 122 and `cms_password_resets`.`deleted_at` is null order by `id` desc) at D:\\phpstudy_pro\\WWW\\projzqb1b\\vendor\\laravel\\framework\\src\\Illuminate\\Database\\Connection.php:664, ErrorException(code: 0): Packets out of order. Expected 1 received 5. Packet size=85 at D:\\phpstudy_pro\\WWW\\projzqb1b\\vendor\\laravel\\framework\\src\\Illuminate\\Database\\Connection.php:332)
  • 另外一段报错源码如下 (也是跟数据库连接有关):
[2024-07-04 16:14:53] local.ERROR: Allowed memory size of 268435456 bytes exhausted (tried to allocate 842087056 bytes) {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\FatalErrorException(code: 1): Allowed memory size of 268435456 bytes exhausted (tried to allocate 842087056 bytes) at D:\\phpstudy_pro\\WWW\\projzqb1b\\vendor\\laravel\\framework\\src\\Illuminate\\Database\\Connection.php:330)
[stacktrace]SQLSTATE[HY000]: General error: 1047 Unsupported statement
  • 根据百度经验,提示需要修改 mysql.cnf 中的 max_allowed_packet 参数
    但是,发现不应该是这个问题,毕竟不使用 mycat 时不会出现问题

  • 继续查找发现,这个问题的原因很可能是数据库配置参数的 【预处理】问题
    设置 database.php 中的 options 的预处理可以解决报错 (但是查询出来的数据全部转为了字符串)

因为上述的变动,代码中的判断,可能会出现问题,尤其是一些 数字类型的 === 比对

  • 希望得到的结果:同时满足 PDO::ATTR_EMULATE_PREPARES => true 和结果集数据类型不被隐式转换

解决方案:Laravel取出mysql数据全部被转成string类型问题


  • 【建议】
配置使用了两天,发现在laravel框架中,会出现很多问题
甚至还会出现其他未注意到的隐藏BUG
比如,当前测试发现,当使用事务时,也会报错
通过百度经验,基本定位在 mycat 的版本与适用性上,对于初步摸索的开发者来说
我认为,选用macat 不合适(且官方已不再维护,百度经验也少)- 后面,探索 laravel 框架直接使用 主从配置,试试看吧

附录

  • 关于 MySQL 的 Packets out of order 问题
  • thinkphp5+mycat 查询出现 Packets out of order. Expected 4 received 0. Packet size=10
  • Laravel连接mycat报错?
  • PDO::ATTR_EMULATE_PREPARES为True时如何避免结果集中Int类型被转换为String

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • CTF-PWN-kernel-栈溢出(retuser rop pt_regs ret2dir)
  • EUC 2024 I. Disks
  • golang 项目打包部署环境变量设置
  • FPGA原型验证(七):如何选择、搭建原型验证平台?
  • Java-关键字(static,final)
  • redis数据库
  • ER模型理论和三范式
  • Infinitar链游新发展新机遇
  • 探索Qt的QVariant:灵活的数据交换机制
  • 无法下载 https://mirrors./ubuntu/dists/bionic/main/binary-arm64/Packages
  • (十六)视图变换 正交投影 透视投影
  • vue3.0(十六)axios详解以及完整封装方法
  • 【React】React18 Hooks 之 useReducer
  • C++--智能指针
  • 洛谷 数学进制 7.9
  • JS 中的深拷贝与浅拷贝
  • 《深入 React 技术栈》
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • CEF与代理
  • C学习-枚举(九)
  • eclipse的离线汉化
  • emacs初体验
  • k8s如何管理Pod
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • markdown编辑器简评
  • PV统计优化设计
  • win10下安装mysql5.7
  • 初探 Vue 生命周期和钩子函数
  • 订阅Forge Viewer所有的事件
  • 力扣(LeetCode)965
  • 那些被忽略的 JavaScript 数组方法细节
  • 1.Ext JS 建立web开发工程
  • #pragma pack(1)
  • #考研#计算机文化知识1(局域网及网络互联)
  • $.each()与$(selector).each()
  • $jQuery 重写Alert样式方法
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (145)光线追踪距离场柔和阴影
  • (6)STL算法之转换
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (二)WCF的Binding模型
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (分布式缓存)Redis分片集群
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • .axf 转化 .bin文件 的方法
  • .Net 6.0--通用帮助类--FileHelper
  • .NET Core 发展历程和版本迭代
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • .NET简谈设计模式之(单件模式)
  • .NET面试题(二)
  • .net与java建立WebService再互相调用
  • .NET中GET与SET的用法
  • @Slf4j idea标红Cannot resolve symbol ‘log‘