当我尝试使用 php mysqli 类连接到 mysql 数据库时出现此错误。使用以下代码:
$db = new MySQLi("localhost","kamil","*****");
密码为 \* 以确保安全。
我创建了用户 kamil
具有外部 IP 地址和本地主机的所有权限。当我运行时: select user,host from mysql.user
它正确显示了这两个用户。
我做了一些研究并使用了这个基准: https ://stackoverflow.com/a/2183134/1839439 来查看它连接到什么。事实证明,它只能连接到 127.0.0.1
和 127.0.0.1:3306
这是本地主机,但是当我提供 localhost
它会抛出这个错误。
我的问题是为什么它只允许我使用 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 |
原文由 Dharman 发布,翻译遵循 CC BY-SA 4.0 许可协议
当您只使用“localhost”时,MySQL 客户端库会尝试使用 Unix 域套接字进行连接,而不是 TCP/IP 连接。该错误告诉您名为
MySQL
的套接字不能用于建立连接,可能是因为它不存在(错误号 2)。来自 MySQL 文档:
有几种方法可以解决这个问题。
127.0.0.1
而不是localhost
来做到这一点。不过,Unix 套接字可能使用起来更快、更安全。php.ini
中的套接字:打开MySQL配置文件my.cnf
找到MySQL创建套接字的位置,并将PHP的mysqli.default_socket
设置为该路径。在我的系统上是/var/run/mysqld/mysqld.sock
。