Apache Web 服务重新启动是否会关闭现有的 MySQL 连接?

Apache Web 服务重新启动是否会关闭现有的 MySQL 连接?

在出现“连接过多”错误的情况下,如果我执行service httpd restart/reload,它会释放现有的 MySQL 连接吗?

重新启动 Apache 时,Apache 是否会关闭 DB 连接但不通知 mysqld。

注意:mysqld 有 wait_timeout = 8 小时。

答案1

简短的回答是肯定的,但不是直接的。无论如何,我会考虑将 MySQL 缩短wait_timeout到更现实的时间,例如 30 秒。

Apache 是一个网络服务器,它接受 HTTP 连接请求并将内容返回给客户端 - 它无法本地连接到 MySQL 数据库。

您的连接最可能的来源是生成对这些请求的响应的应用程序,即 PHP、Java、Python 等 - 您已标记了您的问题,php因此我在这里假设是 PHP。

现在,假设您使用 Apache 的 mod_php 而不是 PHP-FPM,那么 PHP 进程将由 Apache 派生,因此当您重新启动 Apache 时,这些进程将被终止并重新生成。如果您正在运行 PHP-FPM,则重新启动 Apache 不会终止任何 PHP 进程,因为 FPM 作为其自己的守护进程运行。

如果通过 mod_php 终止 PHP 进程,它不会mysql_close()直接调用关闭连接,因此连接将保持打开状态几wait_timeout秒钟。

service httpd graceful您可以使用或告诉 Apache 进行“优雅”重启并允许现有线程在终止之前退出apachectl -k graceful

但是,如果您的 PHP 代码没有通过关闭连接,mysql_close()那么这将是问题的最终根源,并且通过任何方法重新启动 Apache 都无法解决问题。

restart此外, vs 的一个重要区别是reload- 前者终止进程,后者只是重新加载配置。如果您确实想终止进程,请使用restart

相关内容