永久数据库连接不会被重用

时间:2013-08-24 19:23:08

标签: php mysql database-connection mysql-connect mysql-pconnect

我在我的一个应用程序中使用phpgacl库进行授权。该库使用mysql_pconnect与数据库建立连接。问题是连接没有得到重用,有时整个应用程序崩溃时连接错误太多。 我没有太多并发用户,因此增加mysql中的最大连接数不会永久解决问题。 我做了一个简单的测试来简化问题。我写了一个简单的PHP脚本/var/www/a.php

<?
mysql_pconnect('localhost', 'root', 'root');
?>

当我第一次点击localhost/a.php时,我在mysql进程列表中看到了与数据库的一个连接。 当我第二次点击链接时,我希望重用该连接。但是,事实并非如此。创建一个新连接,我看到处于睡眠状态的两个连接。每次点击链接时,计数都会增加。

当我重新启动apache时,所有这些连接都会关闭。

我想知道php mysql_pconnect是如何工作的以及它如何使用以前建立的mysql连接。而且,为什么在我上面提到的例子中没有发生这种情况呢?

其中一条评论here内容为:

You are probably using a multi-process web server such as Apache. Since database connections cannot be shared among different processes a new one is created if the request happen to come to a different web server child process.

这是否意味着不建议在apache中使用mysql_pconnect?

1 个答案:

答案 0 :(得分:0)

每个数据库连接都会在php进程结束时终止。因此,预计持久连接不会与其他Web线程共享。 mysql_pconnect只能为不同类之间的应用程序运行时共享数据库连接, 您的问题的解决方案是:

  1. 减少MySQL配置中数据库连接的超时
  2. 关闭应用中的数据库连接
  3. 为数据库查询创建自己的守护进程(但它非常复杂)