返回顶部

[后端] PHP连接mysql时卡死

[复制链接]
small团团子 显示全部楼层 发表于 2020-11-28 10:02:44 |阅读模式 打印 上一主题 下一主题
已解决
225 1
PHP连接mysql时卡死
small团团子2020-11-28 10:02:44
最近线上一台服务器偶尔会出现连接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



最佳答案

admin管理员 关注Ta

2020-11-28 10:02:45

找到解决方法了,这个场景的超时是属于读写超时,不是连接超时,所以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) ...
查看完整内容
回复

使用道具 举报

精彩评论1

admin 显示全部楼层 发表于 2020-11-28 10:02:45
找到解决方法了,这个场景的超时是属于读写超时,不是连接超时,所以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)
回复

使用道具 举报

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

本版积分规则

星点互联 成立于2014年8月,是目前国内优秀的开源技术社区,拥有超过300万会员,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作