网站建设方案书是什么,正能量网站入口不用下载免费,射阳建设网站多少钱,网站制作工作室哪家比较好背景
近期对负责项目#xff0c;配置了一套 主从复制的 MySQL 集群 使用了中间件 mycat 但测试发现#xff0c;替换了原来的数据连接后#xff0c;会出现 Packets out of order 的报错 同时注意到#xff0c;有的框架代码中竟然也会失效#xff0c;比如 controller 类中配置了一套 主从复制的 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 size85 (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 size85 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 问题thinkphp5mycat 查询出现 Packets out of order. Expected 4 received 0. Packet size10Laravel连接mycat报错PDO::ATTR_EMULATE_PREPARES为True时如何避免结果集中Int类型被转换为String