php脚本执行完就断开MySQL了吗?

一个脚本里面有连接mysql的sql语句,执行的时候mysql服务器是新开一个线程(还是进程?)是处理这个连接,脚本结束后就断开与PHP(还是apache?)的连接了吗。那些什么mysql长连接又是回事呢?突然觉得啥都不懂了。。。

阅读 8.4k
5 个回答

要手动关闭 框架的话类里面的析构函数写上关闭的代码 一般都封装好了 不操心 一般都是单例模式连接mysql

1.mysql开启进程处理相应事务

2.断开与apache httpd进程的连接,php以apache mod方式运行,apache接受到请求,将请求转发给mod,mod调取php
sapi执行,整个过程php以apache模块方式执行,在httpd进程中

3.短链接的缺点:创建一个连接,程序执行完毕后,就会自动断掉与mysql的链接。于是多少次php执行,就会多少次这样的创建和释放过程。频繁地创建和释放连接,比较耗费cpu资源。

 长连接就可以避免每次请求都创建连接的开销,节省了时间和IO消耗。
 
 mysql发现一个链接长时间没有执行查询请求,就会自动断掉这个连接
新手上路,请多包涵

单从php来说不可以维持长连接,但是有方法实现的。

如果是Apache+php_module模式去跑php,通过mysql_pconnect就可以建立永久链接,不过这个链接是由Apache去维持的(mysql_pconnect在nginx+fpm下不能维持长连接的,官方文档有说明)

nginx+fpm fpm一般设置为static,通过PDO扩展,连接数据库时可设置长连接,由每个fpm维持一个永久链接。不过还是要根据系统去评估一下fpm进程数和数据库最大连接数,php请求过少的话,大量连接闲置状态浪费资源(需合理配置mysql wait_time),php请求过多,fpm进程数过多导致超过数据库最大连接数就会造成too many connections。。

一般php每次执行sql都会建立一个短链接,当执行完毕后由php断开链接(也许超时那么将有MySQL来断开链接)

现在有种通用的减少这种IO开销的方式是建立数据库连接池,维护指定数量的连接,用的时候直接获取相关资源就可以。

原声php的话 需要自己手动关闭。 框架的话 一般都封装好了 直接用 就行

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题