ubuntu 14.04LTS 上 php5-fpm 的 mysqli 非标准套接字位置配置

ubuntu 14.04LTS 上 php5-fpm 的 mysqli 非标准套接字位置配置

请随意迁移。我不清楚它属于 serverfault、stackoverflow 还是 Unix 和 Linux。

我最近为客户部署了一些 wordpress 网站。我开始在错误日志中注意到以下错误。

FastCGI: server "/usr/lib/cgi-bin/php5-fpm.fcgi" stderr: PHP message: PHP Warning:  mysqli_real_connect(): (HY000/2002): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) in /home/website_user/website/wp-includes/wp-db.php on line 1490

问题是 MySQL 在 /var/lib/mysql/mysql.sock 上运行,但 mysqli_real_connect() 正尝试连接 /var/run/mysqld/mysqld.sock。

是的,我非常清楚在非默认套接字上运行 mysql 是愚蠢的,只会带来麻烦。不过目前为止,该路径已在很多地方被更改,我记不清了,所以将其改回来也会很麻烦。

# php5-fpm --version
PHP 5.5.9-1ubuntu4.14 (fpm-fcgi) (built: Oct 28 2015 01:38:24)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
    with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies

#php5-fpm --info | grep .default_socket
mysql.default_socket => /var/lib/mysql/mysql.sock => /var/lib/mysql/mysql.sock
mysqli.default_socket => /var/lib/mysql/mysql.sock => /var/lib/mysql/mysql.sock
pdo_mysql.default_socket => /var/lib/mysql/mysql.sock => /var/lib/mysql/mysql.sock

当我从网络浏览器查看 phpinfo() 时,我注意到

MYSQLI_SOCKET = /var/run/mysqld/mysqld.sock 
mysqli.default_socket = /var/lib/mysql/mysql.sock

在此处输入图片描述

我在 php.ini 中是否缺少设置 MYSQLI_SOCKET 的指令?它不使用 mysqli.default_socket 是一个错误吗?

我相信我已经解决了这个问题,方法是授予用户连接到 127.0.0.1 上的 MySQL 的权限,并将 wordpress 中的 DB_HOST 更改为 127.0.0.1:3306。到目前为止,我还没有看到错误日志中出现任何其他错误。

我不确定此代码的作用,因为网页看上去很好,并且上线的几周内我们也没有收到客户的投诉。

我仍然想知道正确的解决方法是什么。为什么 php5-fpm 忽略了 mysqli.default_socket 或者我是否应该使用其他指令。

我发现了几个与此问题类似的 php 错误,但它们都很旧了,而且似乎都已被修复。

这是在 Apache 上使用 php5-fpm 和 MySQL 托管的。这不是我们的正常托管堆栈(我们通常为客户开发 Django 网站)。所以我可能只是犯了一个新手错误。

相关内容