mysqli :: mysqli():(HY000 / 2002):无法通过套接字“MySQL”连接到本地MySQL服务器(2)
当我尝试使用php mysqli类连接到mysql数据库时,出现此错误。 使用以下代码:
$db = new MySQLi("localhost","kamil","*****"); if (mysqli_connect_errno()) { echo "An error occured. Please try again later."; exit(); }
为了安全,密码是*。
我已创build用户kamil
具有外部IP地址和本地主机的所有权限。 当我运行: select user,host from mysql.user
它正确显示这两个用户。
我做了一些研究,并使用这个基准: https : //stackoverflow.com/a/2183134/1839439看看它连接到什么。 事实certificate,它只能连接到127.0.0.1
和127.0.0.1:3306
这是本地主机,但是当我提供localhost
它会抛出这个错误。
我的问题是为什么它只允许我连接到数据库使用本地主机IP地址,而不是名称或外部IP。 如果我想要在网站上使用mysql,或者我可以使用127.0.0.1
我需要不同的主机吗?
编辑:
hosts
文件
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用户表结果:
| kamil | 109.255.177.28 | | kamil | localhost |
当您只使用“localhost”时,MySQL客户端库将尝试使用Unix域套接字来进行连接,而不是使用TCP / IP连接。 错误是告诉你,名为MySQL
的套接字不能用于build立连接,可能是因为它不存在(错误号2)。
从MySQL文档 :
在Unix上,MySQL程序专门处理主机名localhost,与其他基于networking的程序相比,这种方式可能与您期望的不同。 对于连接到本地主机,MySQL程序试图通过使用Unix套接字文件连接到本地服务器。 即使给出了–port或-P选项来指定端口号,也会发生这种情况。 要确保客户端与本地服务器build立TCP / IP连接,请使用–host或-h指定主机名值127.0.0.1,或者本地服务器的IP地址或名称。 您也可以通过使用–protocol = TCP选项来显式指定连接协议,即使是本地主机也是如此。
有几种方法可以解决这个问题。
- 你可以使用TCP / IP而不是Unix套接字。 连接时,您可以使用
127.0.0.1
而不是localhost
。 尽pipe如此,Unix套接字可能更快,更安全。 - 您可以在
php.ini
更改套接字:打开MySQLconfiguration文件my.cnf
以查找MySQL创build套接字的位置,并将PHP的mysqli.default_socket
设置为该path。 在我的系统上是/var/run/mysqld/mysqld.sock
。 -
打开连接时直接在PHP脚本中configuration套接字。 例如:
$db = new MySQLi('localhost', 'kamil', '***', '', 0, '/var/run/mysqld/mysqld.sock')
如果是PHP问题,可以简单地将configuration文件php.ini改为所在位置,并更新PORT / SOCKET-PATH等设置,使其连接到服务器。
在我的情况下,我打开文件php.ini,并做到了
mysql.default_socket = /var/run/mysqld/mysqld.sock mysqli.default_socket = /var/run/mysqld/mysqld.sock
它马上就起作用了。 我不得不承认,我从@Joni接受的答案中得到了暗示
如果'本地主机'不起作用,但127.0.0.1。 确保您的本地主机文件指向正确的位置。 (linux / mac的/ etc / hosts,windows的C:\ system32 \ drivers \ etc \ hosts)。
另外,请确保您的用户被允许连接到您尝试select的任何数据库。
请检查以下文件
%SystemRoot%\system32\drivers\etc\host
用ip绑定主机名的那一行可能会丢失一行将它们绑定到一起的行
127.0.0.1 localhost
如果给定的行丢失。 在文件中添加行
你还可以检查你的MySQL数据库的用户表,并告诉我们你正在使用的用户的主机列值。 对于主机“127.0.0.1”和“localhost”,您应具有用户特权,并使用%,因为它是通用主机名的通配符。
[已解决]:我们整合的解决scheme是,我们增加了服务器空间,并且已经解决了。
不知道确切的原因,但我们的方式得到解决。