phpMyAdmin出现了#2002无法登录到mysql服务器的错误。

41
我在本地机器上安装了MySQL服务器企业版5.1,现在想安装phpMyAdmin,但它无法使用。我将phpMyAdmin解压到我的服务器根目录,并浏览到“localhost/phpMyAdmin/setup/index.php”,启动了一个新服务器,我改变的唯一设置是在“配置auth密码”字段中填写了我的MySQL密码。现在当我尝试登录时,出现错误消息“#2002无法登录到mysql服务器phpmyadmin”。有人知道怎么回事吗?我从昨天开始就一直遇到这个问题。

1
你是否正在使用cookie身份验证?这是指在配置文件中没有db凭据(除了主机,我想)并且您在Web应用程序中提供用户名+密码的情况。我相信您可以在配置文件中提供凭据,从而跳过登录过程(显然仅适用于非互联网服务器)。您能否使用您用于登录phpMyAdmin的凭据从mysql控制台(/path/to/mysql.exe -u username -h localhost -p)登录? - halfer
什么都不会起作用,我也遇到了同样的错误,尝试了很多方法但没有成功。我建议你将mysql数据文件夹保存在安全的地方,并重新安装phpmyadmin。这样就可以正常工作了,下次不要尝试输入密码。 - Akash Shah
1
@Reddox的回答解决了我的问题。也许应该将其标记为已解决。 - apis17
不要直接编辑配置文件,尝试使用 sudo dpkg-reconfigure phpmyadmin 命令,您可以选择新的身份验证方法。使用主机IP/名称代替 localhost(它使用可能已被禁用的Unix套接字)。 - Bhargav Nanekalva
27个回答

118
如果在登录phpmyadmin时出现#2002 Cannot log in to the MySQL server错误,请尝试编辑phpmyadmin/config.inc.php并更改:$cfg['Servers'][$i]['host'] = 'localhost';$cfg['Servers'][$i]['host'] = '127.0.0.1';。这个解决办法来源于Ryan的博客编辑(20-Mar-2015): 请注意,如果是全新安装,可能不存在config.inc.php文件。您需要重命名/复制config.sample.inc.php文件,然后更改相关行。

1
最近在 Windows 8 上更改了服务器的监听(绑定)地址为 ::1。在配置中更改为 localhost 即可生效。 - apis17
1
请注意,如果您是新安装的系统,则可能不存在config.inc.php文件。您需要重命名/复制config.sample.inc.php文件,然后更改相关行。 - octern
1
实际上,您正在绕过真正的问题:MySQL套接字配置。 MySQL使用套接字来连接host=localhost,但使用TCP连接host=127.0.0.1 请查看https://dev59.com/82Yr5IYBdhLWcg3wVYog#13771199,并确保Apache用户具有足够的权限访问MySQL套接字。 - slamora
对我来说,这个文件的路径是/etc/phpmyadmin/config.inc.php - Imran Zahoor
在我的情况下,相反的效果更好:将127.0.0.1更改为localhost。 - user2587656

26

这篇文章虽然有些陈旧,但因为它是谷歌搜索结果中的第一篇,所以还是值得关注的。

请注意,当您的MySQL服务停止运行时,也会出现这种情况。

我通过简单地使用以下命令重启MySQL服务器解决了此问题:

/etc/init.d/mysql restart

在SSH中执行此命令,适用于CentOS/CPanel服务器。


9

背景:

我正在使用Linux Mint 13。在我的情况下,当我重新启动计算机并且DHCP为我的桌面分配了一个新的本地IP地址(从192.168.0.2到192.168.0.4)时,出现了这个错误。

sudo gedit /etc/mysql/my.cnf

更新
bind-address = 192.168.0.2

为了

bind-address = localhost

这解决了问题。享受吧。

1
将我的 bind-address 从默认的 127.0.0.1 更改为 localhost 解决了我在Ubuntu服务器上遇到的问题。 - Jared Dunham
谢谢,它有效。在我的情况下,我将服务器移动到另一个IP并进行了先前的备份,因此bind-address仍在使用旧IP。 - fxbayuanggara

4
在尝试了以上所有建议后,以下操作解决了我的 #2002 错误。
在您的 config.inc.php 文件中添加以下行,并将数字更改为您的 MySQL 端口号:
$cfg['Servers'][$i]['port'] = '3307'; // MySQL port

我安装了多个mysql实例,在这种情况下,我已经更新了my.ini以在端口3307上运行MySQL,但没有更新phpMyAdmin以反映新的端口。在我的情况下,配置文件config.inc.php中没有端口的行,所以我不知道它需要更新。


4
这也可能是由于您忘记(就像我一样)在完成安装脚本后将config.inc.php移动到正确的位置而导致的。
在创建config文件夹、执行chmod o+rw config并访问localhost/phpmyadmin/setup并按照那些步骤操作之后,您需要返回命令行并完成以下操作:
mv config/config.inc.php .         # move file to current directory
chmod o-rw config.inc.php          # remove world read and write permissions
rm -rf config                      # remove not needed directory

请参阅完整说明:https://phpmyadmin.readthedocs.org/en/latest/setup.html。这个链接包含了有关如何设置phpMyAdmin的详细说明。

这个方法确实有效,但仍然有些令人困惑。安装过程告诉您将config.inc.php文件移动到config/目录中。即使在新版本的phpMyAdmin中也是如此,因此似乎文件应该放在那里,但我认为并不是这样。 - superuserdo

3

您在计算机上安装了MySQL吗?看起来您正在使用Windows;MySQL在计算机上作为“服务”运行(右键单击我的电脑 -> 管理 -> 服务)。


是的,那是正确的。我正在使用Windows,MySQL作为名为MySQL的服务正在运行。我也使用IIS作为服务器,而不是Apache。 - narancha

3
我在stackoverlow中尝试了所有解决方案,但都没有解决我的问题。我可以从Linux命令行直接登录mysql,但使用相同的用户和密码无法登录phpMyAdmin。
我为此苦思冥想了大半天,直到意识到它甚至没有读取位于/etc/phpmyadmin下的config.inc.php文件(根据“find / -iname config.inc.php”所在的唯一位置)。因此,我更改了/usr/share/phpMyAdmin/libraries/config.default.php中的主机名,并最终解决了问题。
我知道可能还有其他原因导致它无法从/etc/phpmyadmin文件夹中读取配置,但现在我无暇顾及:P
简而言之,如果您的设置似乎根本没有应用,请尝试在/usr/share/phpMyAdmin/libraries/config.default.php中进行更改。

哇...谢谢这个...我一直在尝试将phpmyadmin连接到另一个LAN主机,但遇到了这个问题...这是唯一有效的解决方案。 - M_R_K

2
当我更改AWS服务器实例类型时,出现了这种情况。
“#2002无法登录MySQL服务器”也可能发生在mysqld服务未启动时。
因此,首先您需要执行以下操作:
$ sudo service mysqld restart

这将为您提供:
$ sudo service mysqld restart
Stopping mysqld:                                           [  OK  ]
Starting mysqld:                                           [  OK  ]

之后错误将不再出现。

P.S. 在EC2实例上,应按照顶部答案中提到的方式将主机从localhost更改为127.0.0.1


2

我也经历过同样的事情,希望这个能帮到你。

cd /etc/init.d
./mysql start

请登录以访问MySQL和phpMyAdmin。


1

我曾多次在我们的设置中遇到此问题,因此我制作了一个检查清单。

这假定您希望phpMyAdmin使用UNIX套接字而不是TCP/IP连接本地MySQL。

UNIX套接字应该稍微快一些,因为它们具有更少的开销,并且可以更安全,因为只能本地访问。

服务

  • mysqld服务是否正在运行? service mysqld status
  • 如果没有,则 service mysqld start
  • 配置是否自启动以来发生了更改? service mysqld restart

MySQL配置 (my.cnf)

  • 检查是否设置了非套接字客户端协议,例如protocol=tcp
  • 检查套接字位置是否可访问并具有正确的权限

PHP配置 (php.ini)

如果您可以从命令行本地连接,但无法从phpMyAdmin连接,并且套接字文件不在默认位置:

  • 将mysqli默认套接字设置为新位置:mysqli.default_socket = *location*
  • ...我还设置了pdo_myql.default_socketmysql.default_socket以确保
  • 重新启动您的Web服务(在我的情况下是httpd):service httpd restart

phpMyAdmin配置(config.inc.php)

  • 检查主机是否设置为localhost:$cfg['Servers'][$i]['host'] ='localhost';
  • 套接字位置也可以在此处设置:$cfg['Servers'][$i]['socket'] = '*location*';

N.B.

正如@chk所指出的那样;将$cfg['Servers'][$i]['host']localhost设置为127.0.0.1只会导致连接使用TCP/IP而不是使用套接字,这更像是一种解决方法而不是解决方案。

MySQL配置设置bind-address=也仅影响TCP/IP连接。

如果您不需要远程连接,建议使用 skip-networking 关闭 TCP/IP 监听。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接