mysqli_real_connect():(HY000 / 2002):没有这样的文件或目录


76
mysqli_real_connect(): (HY000/2002): No such file or directory

MacOS上的PhpMyAdmin错误。我想回答,我真的不知道该怎么解决。


您能否提供更多信息?
凯文·瓦利斯

Answers:


107

在/etc/phpmyadmin/config.inc.php中将localhost更改为127.0.0.1

$cfg['Servers'][$i]['host'] = '127.0.0.1';

这样做的原因是,如果您使用本地主机,则pma尝试连接到mysql.socket。如果您使用127.0.0.1,则PMA会建立TCP连接,该连接应该正常工作。


6
我很高兴找到这个答案来使工作正常进行,但是真正的解决方法是什么?这是一种解决方法。您应该可以使用localhost
尼波(Nilpo)'17

2
您会这​​样想,但显然不是。关于“连接类型”设置:“从4.7.0版开始不推荐使用:此设置自4.7.0版本起不再使用,因为MySQL根据主机确定连接类型,因此可能导致意外结果。” 参考:docs.phpmyadmin.net/en/latest/config.html
imclean

“真正的解决办法”是阅读和理解MySQL文档,然后编辑配置文件并拥有一个系统,让您知道发生了什么,而不仅仅是遵循一些建议并在一切正常运行后就将一切都忘了。如果要使用localhost,则必须将MySQL配置为侦听套接字而不是TCP / IP。当您的数据库位于同一台计算机上时,我总是建议您这样做。
巴绍(Bachsau)

非常感谢。我坚持了一段时间。不知道问题这么小。
ashukid

21

我以前尝试过

cd /opt/lampp/phpmyadmin

然后

gedit config.inc.php

找到这个

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

如果有localhost更改为127.0.0.1

注意:如果有'//',请在//之前删除// $cfg['Servers'][$i]['host']

我再次检查 http://localhost/phpmyadmin/

Mysqli说:

“ phpMyAdmin试图连接到MySQL服务器,服务器拒绝了连接。您应该检查配置中的主机,用户名和密码,并确保它们与MySQL服务器管理员提供的信息相对应。”

我再次打开config.inc.php,发现

$cfg['Servers'][$i]['password'] =

用您的密码填写密码

它为我工作。它也可能为您工作。


节省我很多时间
dadan

1
自2018年10月起,MAMP路径应为/Applications/MAMP/bin/phpMyAdmin/config.inc.php。它像魅力一样工作:-)
ImFarhad '18

18

定位 config.sample.inc.php

更改

$cfg['Servers'][$i]['host'] = 'localhost';

进入

$cfg['Servers'][$i]['host'] = '127.0.0.1';

救。

然后重命名文件并从名称中删除样本


14

也许您的SQL Server已停止

sudo /etc/init.d/mysql start

要么

sudo service mysqld start

service mysql status用来检查状态

编辑添加评论:

使用:

sudo systemctl enable mysql 

保持运行MySQL。


1
服务mysqld重新启动
GAV

它对我有用,但是最大的问题是为什么它停止了?因为我经常得到这个。
COS

@Komi用于sudo systemctl enable mysql保持运行MySQL。这么晚才回复很抱歉。我完全错过了。
Abdulla Nilam

10

mysqli_connect():(HY000 / 2002):没有这样的文件或目录

背景:

我只是想使用Terminal在Mac上运行一些PHPUnit测试。我想测试的某些类必须连接由PHPMyAdmin创建和管理的MySQL DB,而我正在使用的Web应用程序在localhost中运行良好。因此,当我运行该测试用例时,在终端上出现以下错误:

mysqli_connect(): (HY000/2002): No such file or directory

解:

因此,由于痒,我不得不解决它并运行我的测试,我搜索了几个SO Q&A线程并进行了尝试。各种变化对我来说都是有效的。

  1. 找到config.inc.php与PHPMyAdmin相关的文件。
  2. 找到$cfg['Servers'][$i]['host']大部分行,默认情况下此行可能已被注释掉,如果是这样,请取消注释。
  3. 并用以下内容替换该行:

$cfg['Servers'][$i]['host'] = '127.0.0.1';

  1. 保存它,然后从XAMPP控制面板(manager-osx)重新启动MySQL数据库。
  2. $hostmysqli_connect()方法中的参数值更改为以下内容:

$_connection = mysqli_connect(**"localhost: 3306"**, $_mysql_username, $_mysql_password, $_database);

注意:3306是我的MySQL端口号,这是它的默认端口号。在执行以下步骤之前,您最好检查一下实际的MySQL端口号。

就这样。对我来说,只有这些步骤才能奏效,而没有别的。我运行了单元测试,它运行正常,并且根据测试,数据库数据也已正确更新。

工作原理:

我可能发现的最接近的原因是它起作用,因为有时该mysqli_connect方法需要数据库的可用套接字(数据库主机的IP地址以及端口号)。因此,如果您已注释掉该$cfg['Servers'][$i]['host'] = '127.0.0.1';行或将“ localhost”设置为其中的值,则它将忽略端口号。但是,如果要使用套接字,则必须使用“ 127.0.0.1”或真实主机名。(对我来说,这似乎与我们实际使用的默认端口号无关,我们必须执行上述步骤。)阅读PHPMyAdmin的以下链接以获取更多详细信息。

希望这可能对其他人有所帮助。

干杯!


6

我今天通过以下步骤解决了该问题:

  1. 如果phpMyadmin目录中不存在config.inc.php,请将config.sample.inc.php复制到config.inc.php。

  2. 添加套接字到 /* Server parameters */

    $cfg['Servers'][$i]['socket'] = '/tmp/mysql.sock';
    
  3. 保存文件并通过URL访问phpmyadmin。

如果使用的是mysql 8.0.12,则应使用旧密码加密,因为php客户端不支持强加密。 在此处输入图片说明


绝对是macOS用户的最佳答案!
塞比(Sebj)

当使用从HOMEBREW安装的php和httpd时,我不得不使用旧的密码加密使其工作,然后再使用来自Macos Catalina的本机PHP和httpd,所以我不需要更改它,因此当我从本地重新安装PHP和HTTPD时,我失去了连接...感谢您的回答
-Sultanos

5

首先,确保mysql服务正在运行:

ps elf|grep mysql

如果正在运行,您将看到这样的输出:

4 S root      9642     1  0  80   0 -  2859 do_wai 23:08 pts/0    00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/lib/mysql/tomcat-machine.local.pid
4 S mysql     9716  9642  0  80   0 - 200986 poll_s 23:08 pts/0   00:00:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/lib/mysql/tomcat-machine.local.err --pid-file=/var/lib/mysql/tomcat-machine.local.pid

然后在config.inc.php中将localhost更改为127.0.0.1

$cfg['Servers'][$i]['host'] = '127.0.0.1';

“ root”用户的默认密码为空“”,请勿输入任何密码

如果不允许空密码,则需要再次编辑config.inc.php并更改:

$cfg['Servers'][$i]['AllowNoPassword'] = true;

问题是配置设置和MySQL无法运行的结合。这就是帮助我解决此错误的原因。


1

我在CentOS上遇到了这个问题。

首先我尝试一下

sudo service mysql restart

然后出现错误

Redirecting to /bin/systemctl restart mysql.service
Failed to restart mysql.service: Unit not found.

然后我发现了这个

命令这个解决我的问题

systemctl start mariadb.service

0

如果您的网站运行正常,现在出现意外错误(HY000/2002): No such file or directory

然后,您不应更改任何配置文件!

首先检查服务器error.log文件,对于Nginx,它位于:

/var/log/nginx/error.log

或者对于Apache,请尝试:

/var/log/apache2/error_log

就我而言,我可以在error.log中看到Nginx的PHP致命错误:内存不足

解决方案:向服务器添加更多RAM。


我尝试先重启Web服务器,然后再升级/添加RAM。然后我摆脱了ERROR (HY000/2002) but got some ERROR 50X: Connection Error...

此时,我添加了2GB RAM,重新启动了Web服务器,并且一切正常!

当Web服务器启动时,我注意到由于1个PHP脚本中的循环错误而导致200多个cron-jobs卡住了。

因此,请检查哪个脚本正在占用内存。


0

如果您使用的是Mac OS和Brew,请尝试以下操作:

mkdir /usr/local/etc/my.cnf.d

0

我有同样的问题。在我这里/etc/mysql/my.cnf,没有更多的mysqld.sock定义途径。因此,我开始进行搜索以找到以下内容:find / -type s | grep mysqld.sock但找不到。我用以下命令重新安装了mysql :(apt install mysql-server-5.7请在执行当前sql-server-version之前检查)。

这解决了我的问题。


0
mysqli_connect(): (HY000/2002): No such file or directory

我在debian9 VM上也遇到了同样的问题,我尝试重新启动MySQL,但是并没有解决问题,此后我增加了RAM(减少了)并开始工作。


0

如果您使用的是SELinux,请检查一下。

我有同样的问题。我在运行带有SELinux强制功能的CentOS 8时,mysqli_real_connect(): (HY000/2002): No such file or directory尽管正确配置了所有配置,但遇到了问题()中提到的错误。在允许通过SELinux进行MySQL连接之后,我后来摆脱了麻烦。

使用以下命令检查SELinux状态:

sestatus

允许Apache通过SELinux连接数据库

setsebool httpd_can_network_connect_db 1

使用-P选项使更改永久生效。如果没有此选项,则布尔值将在重新启动时重置为0。

setsebool -P httpd_can_network_connect_db 1


0

尝试一下

sudo service mysql restart

对我有用


0

如果您使用的是archlinux或Ubuntu,只需输入以下命令:

cd /opt/lampp/phpmyadmin

然后

sudo gedit config.inc.php

然后,当您访问文件时,请查找以下脚本,

//$cfg['Servers'][$i]['host'] ='localhost'

删除“ //”,使其保持如下所示:

$cfg['Servers'][$i]['host'] ='localhost'

然后将“ localhost ”更改为“ 127.0.0.1 ”,脚本应如下图所示:

$cfg['Servers'][$i]['host'] ='127.0.0.1'

返回浏览器并输入http://127.0.0.1/phpmyadmin/

如果仍然拒绝

您应该检查配置中的主机,用户名和密码,并确保它们与MySQL服务器管理员提供的信息相对应。

因此,请返回到您正在编辑的同一文件config.inc.php,并执行以下操作:

cd /opt/lampp/phpmyadmin

然后

sudo gedit config.inc.php

搜索下面的脚本

$cfg['Servers'][$i]['password'] =''

用您的root密码填写密码

$cfg['Servers'][$i]['password'] ='your_password'

它应该工作。


-1

如果上述解决方案不起作用,请尝试将默认por从3306更改为另一个(即3307)


-8

您只需要将ib_logfile0和ib_logfile1重命名为ib_logfile_0和ib_logfile_1。然后您的问题将得到解决。


那是完全无关的。
帕维尔Tomkiel

您的答案与问题无关。重命名日志文件将无助mysqli查找套接字或与MySQL服务器的连接。如果我们误解了您的答案,则可能需要更新它,否则删除此答案会更好。请阅读如何回答指南。
AnthonyB
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.