警告:mysqli_real_connect():( HY000 / 2002):第1452行/private/tmp/wordpress/wp-includes/wp-db.php中没有此类文件或目录

时间:2015-09-27 16:00:04

标签: php mysql wordpress mysqli mysql-connect

我试图运行PHPUnit来对WordPress插件进行单元测试,但标题中的错误仍然显示出来。

我使用WP-CLI设置单元测试,但是当我尝试运行时,WP-CLI也会抛出类似的错误。

我使用MAMP来运行数据库。

我已将WP-CLI和PHPUnit设置为phars,它们在〜/ .bash-profile中别名,并使用默认的" php"由OS X提供。 更改此项,并使用MAMP提供的最新PHP版本运行WP-CLI和PHPUnit修复了WP-CLI(它正在运行并连接到数据库就好了)但PHPUnit仍然抛出相同的错误。

我已经尝试编辑wp-config.php文件,并将主机设置为":/ path / to / mamp / mysql.socket"," localhost:/ path / to / MAMP / mysql.socket"和" 127.0.0.1",没有一个帮助。

我完全陷入了困境,并且不知道下一步该尝试什么。

6 个答案:

答案 0 :(得分:15)

我刚遇到此错误 - 您是否检查了wp-config.php指定的架构?

在我的情况下,我完全忘记创建它,因此修复就像CREATE DATABASE wordpress一样简单。

wp-config.php数据库主机错误时,我也会遇到此错误(尝试交换localhost127.0.0.1)。

答案 1 :(得分:6)

首先,确保MySql实际上正在运行。如果流程尚未启动,它将无法创建套接字文件。

netstat -tulpn | grep mysql

ps -e | grep mysql

如果MySql正在运行,请将wp-config.php中的数据库主机从localhost更改为127.0.0.1,但这只是一种解决方法。

当您指定localhost时,mysqli_real_connect()函数会尝试通过无法找到的Unix套接字连接到您的数据库(因此"没有这样的文件"错误。)如果指定127.0.0.1,它会尝试使用默认TCP端口(通常为3306)连接到您的数据库。

这不能解决PHP不知道在哪里找到MySql套接字的问题。您需要在php.ini中配置以下选项。套接字的位置将根据您的操作系统而有所不同,但您通常可以通过运行locate mysql.sock来找到它。这是我在CentOS 6.8上运行的设置。

<强>的php.ini

pdo_mysql.default_socket = /var/lib/mysql/mysql.sock
mysqli.default_socket = /var/lib/mysql/mysql.sock

其他系统通常使用/tmp/mysqld.sock。您可以通过检查MySql配置文件my.cfg验证配置的位置。

一旦您将PHP配置为指向正确的套接字位置,请重新启动Apache / nginx以便它获取新设置。

现在您可以按预期使用localhost

答案 2 :(得分:0)

只需转到你的phpMyAdmin,点击你的数据库并复制正在运行服务的ip并替换你的wp-config.php文件:

/ ** MySQL主机名* / define('DB_HOST','localhost');

/ ** MySQL主机名* / define('DB_HOST','ip_where_is_running_mysqlserver');

Replace Localhost to ip of running MySQL Server

答案 3 :(得分:0)

这让我很困惑,但最终我解决了。

我的MySQL端口是3308,所以我改变了#34; 127.0.0.1&#34;到&#34; localhost:3308&#34;在

Object.prototype = null

有效!

另外,我设置了

$cfg['Servers'][$i]['host'].

和...

$cfg['Servers'][$i]['controluser'] = '';

$cfg['Servers'][$i]['controlpass'] = '';

但我认为最关键的是端口改变了。

答案 4 :(得分:0)

wp-cli创建符号查找更为有效,并消除了编辑许多文件并跟踪wp-config文件的问题。

我为MAC Sierra和MAMP PRO做到了,

使用netstat找到mysql套接字文件后,创建它的符号链接

netstat -a | grep mysql

var文件夹中创建文件。

cd /var 
sudo mkdir mysql
sudo chmod 755 mysql
cd mysql
sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock mysql.sock
WordPress安装文件夹中的

wp插件列表有效

/path/to/wordpress/installation $ wp plugin list
-------------------------------------------------+----------+-----------+---------+
| name                                            | status   | update    | version |
+-------------------------------------------------+----------+-----------+---------+
| advanced-custom-fields                          | active   | none      | 5.9.0   |
| akismet                                         | active   | none      | 4.1.6   |
| bbp-voting                                      | inactive | available | 1.3.5   |
| breadcrumb-navxt                                | active   | none      | 6.5.0   |
| contact-form-7                                  | active   | none      | 5.2.2   |
| flamingo                                        | active   | none      | 2.2     |
| keydesign-addon                                 | active   | none      | 3.2     |
| post-my-contact-form-7                          | active   | none      | 4.1.8   |

答案 5 :(得分:-2)

在/wp-includes/wp-db.php(WordPress v 4.5中的第1489行)中的报告行中,代码为:

mysqli_real_connect( $this->duh, $host, $this->dbuser, $this->dbpassword, null, $port, $socket, $client_flags );

通过在前面添加@,问题就消失了。所以代码应该是:

@mysqli_real_connect( $this->duh, $host, $this->dbuser, $this->dbpassword, null, $port, $socket, $client_flags );

添加缺少的@,保存并上传修改后的文件以使警告消失。