Apache Web服务重新启动closures现有的MySQL连接吗?

在“连接太多”的情况下,如果我做了一个service httpd restart/reload ,它会释放现有的MySQL连接吗?

有可能在重新启动Apache时,Apacheclosures数据库连接但不通知mysqld。

注意:mysqld有wait_timeout = 8小时。

简单的答案是肯定的,但不是直接的。 在任何情况下,我都会考虑将你的MySQL wait_timeout减less到更真实的30秒。

Apache是​​一个Web服务器,它接受HTTP连接请求并将内容提供给客户端 – 它不能本地连接到MySQL数据库。

你的连接最可能的来源是一个应用程序生成对这些请求的响应,即PHP,Java,Python等 – 你已经用php标记了你的问题,所以我将在这里假设PHP。

现在,假设你使用的是Apache的mod_php而不是PHP-FPM,那么PHP进程由Apache分支,所以当你重新启动Apache时,这些进程将被终止并重新生成。 如果您正在运行PHP-FPM,那么重新启动Apache不会像FPM作为自己的守护程序运行那样杀死任何PHP进程。

在PHP进程被mod_php杀死的情况下,它不会调用mysql_close()来直接closures连接,因此连接将保持打开wait_timeout秒。

你可以告诉Apache做一个“优雅的”重启,并允许现有线程在终止前退出,使用service httpd gracefulapachectl -k graceful

但是,如果您的PHP代码没有通过mysql_close()closures连接,那么这将是您的问题的根本来源,并通过任何方法重新启动Apache不会解决问题。

另外, restartreload有重要区别 – 前者终止进程,后者只是重新加载configuration。 如果您确实想要终止进程,请使用restart