php - 持久数据库连接没有被重用

标签 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进程列表中看到一个到数据库的连接。 当我第二次点击该链接时,我希望该连接能够被重用。但是,事实并非如此。创建一个新连接,我看到两个连接处于 sleep 状态。每次我点击链接时计数都会增加。

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

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

评论之一here内容如下:

您可能正在使用多进程 Web 服务器,例如 Apache。自从 数据库连接不能在不同进程之间共享新的 如果请求碰巧到达不同的 Web 服务器,则会创建一个 子进程。

这是否意味着不建议将 mysql_pconnect 与 apache 一起使用?

最佳答案

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

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

关于php - 持久数据库连接没有被重用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18422263/

相关文章:

mysql - 如何将经纬度数据正确导入MySQL?

scala - 如何处理 'Configuration error[Cannot connect to database [...]]'

android - 如何在不使用 "content://sms"的情况下访问 Android 上的短信/彩信数据库

php - 如何在 Eclipse 中启用书签?

php - CodeIgniter - 检查数据库中是否已存在 slug

php - APC 和 Varnish

php - 是否可以获得cpanel mysql数据库前缀?

mysql - key 'groser' 的重复条目 'PRIMARY'

java - HBase:什么是 NotServingRegionException?

php - SELECT sql 语句,从一个表中检索一行,并从另一个表中检索许多相关行