首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysqli::mysqli():(HY000/2002):无法通过套接字“MySQL”连接到本地MySQL服务器(2)

mysqli::mysqli():(HY000/2002):无法通过套接字“MySQL”连接到本地MySQL服务器(2)
EN

Stack Overflow用户
提问于 2012-12-07 19:09:35
回答 5查看 190.6K关注 0票数 36

当我试图使用php mysqli类连接到mysql数据库时,会出现此错误。使用以下代码:

代码语言:javascript
复制
$db = new MySQLi("localhost","kamil","*****");

密码是*用于安全。

我已经使用外部ip地址和本地主机上的所有特权创建了用户kamil。当我运行:select user,host from mysql.user时,它正确地显示了这两个用户。

我做了一些研究,并使用这个基准:https://stackoverflow.com/a/2183134/1839439来查看它连接到什么。事实证明,它只能连接到本地主机127.0.0.1127.0.0.1:3306,但是当我提供localhost时,它会抛出这个错误。

我的问题是,为什么它只允许我使用本地主机ip地址而不是名称或外部ip连接到DB。如果我想在网站上使用mysql,还是可以使用127.0.0.1,我需要一个不同的主机吗?

hosts文件

代码语言:javascript
复制
127.0.0.1       localhost
::1             localhost ip6-localhost ip6-loopback
fe00::0         ip6-localnet
ff00::0         ip6-mcastprefix
ff02::1         ip6-allnodes
ff02::2         ip6-allrouters

127.0.1.1       raspberrypi

Mysql用户表结果为该用户:

代码语言:javascript
复制
| kamil            | 109.255.177.28 |
| kamil            | localhost      |
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-12-07 21:24:13

当您只使用"localhost“时,MySQL客户端库尝试使用Unix域套接字来连接,而不是使用TCP/IP连接。错误告诉您,名为MySQL的套接字不能用于连接,可能是因为它不存在(错误号2)。

来自MySQL Documentation

在Unix上,MySQL程序特别对待主机名localhost,这种方式可能与其他基于网络的程序不同。对于到本地主机的连接,MySQL程序试图使用Unix文件连接到本地服务器。即使给出一个-端口或-P选项来指定端口号,也会发生这种情况。要确保客户端与本地服务器建立TCP/IP连接,请使用--host或-h指定主机名值为127.0.0.1,或指定本地服务器的IP地址或名称。您还可以使用-- protocol =TCP选项显式地指定连接协议,甚至对于localhost也是如此。

解决这个问题有几种方法。

  1. 您可以只使用TCP/IP而不是Unix套接字。在连接时,您可以使用127.0.0.1而不是localhost来实现这一点。不过,Unix套接字使用起来可能更快、更安全。
  2. 您可以在php.ini中更改套接字:打开MySQL配置文件my.cnf以查找MySQL创建套接字的位置,并将PHP的mysqli.default_socket设置为该路径。在我的系统里是/var/run/mysqld/mysqld.sock
  3. 打开连接时,直接在PHP脚本中配置套接字。例如: $db =新的MySQLi('localhost','kamil',‘**’,'',0,'/var/run/mysqld/mysqld.sock')
票数 84
EN

Stack Overflow用户

发布于 2017-04-26 07:47:04

如果是PHP问题,您可以简单地修改配置文件php.ini,并更新端口/套接字路径等的设置,以使其连接到服务器。

在我的例子中,我打开了文件php.ini

代码语言:javascript
复制
mysql.default_socket = /var/run/mysqld/mysqld.sock
mysqli.default_socket = /var/run/mysqld/mysqld.sock

它马上就起作用了。我不得不承认,我从@Joni接受的答案中得到了暗示

票数 5
EN

Stack Overflow用户

发布于 2012-12-07 19:12:50

如果'localhost‘不起作用,则127.0.0.1起作用。确保本地主机文件指向正确的位置。( linux/mac的/etc/hosts/mac,C:\windows\System32 32\drivers\etc\host for windows)。

此外,确保允许您的用户连接到您试图选择的任何数据库。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13769504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档