返回顶部

PHP连接mysql时卡死

[复制链接]
汪老师 显示全部楼层 发表于 2025-9-3 19:26:32 |阅读模式 打印 上一主题 下一主题
未解决1
64 1
PHP连接mysql时卡死
汪老师2025-09-03 19:26:32
最近线上一台服务器偶尔会出现连接mysql的时候PHP进程卡死的情况,排查后发现,PHP当时和mysql之间的tcp连接已经建立,但怀疑tcp连接建立后,mysql没有发送greeting packet给PHP,然后就导致PHP一直在等待。


模拟测试
然后我写了下面一段测试代码,为了模拟上述的那种情况,数据库地址和端口是使用百度主页的地址和端口,然后在浏览器里访问运行,代码如下:
  1. $mysql = new mysqli();
  2. $mysql->options(MYSQLI_OPT_CONNECT_TIMEOUT, 5);
  3. $mysql->real_connect('www.baidu.com', 'root', 'xxx', 'xxx', 80);
复制代码
代码里已经有使用MYSQLI_OPT_CONNECT_TIMEOUT设置了连接超时时间为5秒,但并没有生效,运行后PHP还是卡死了,不会超时,跟线上环境的情况一模一样。请问有什么方法可以设置超时时间吗?
测试环境
windows 10
PHP 5.6



回复

使用道具 举报

精彩评论1

admin 显示全部楼层 发表于 2025-9-3 19:28:37
找到解决方法了,这个场景的超时是属于读写超时,不是连接超时,所以MYSQLI_OPT_CONNECT_TIMEOUT配置的超时是不会生效的。读写超时需要通过php.ini里的mysqlnd.net_read_timeout参数来配置才能生效。


注:PHP 5.3(含) ~ PHP 7.1(含) 只能通过修改php.ini文件来调整 net_read_timeout 的值,PHP 7.2(含)之后的版本可以在代码里通过 ini_set 函数来调整,例如:ini_set('mysqlnd.net_read_timeout', 1)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

互动派教育以北京软研国际信息技术研究院专家团组为依托,专业提供各学科专业化技术教育培训与技术指导,致力于为全国高校和企业提供全方位的技术能力提升及针对高校及企业提供专业化技术提升方案。
  • 官方手机版

  • 微信公众号

  • 官方咨询