php – 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();
}

密码为*用于安全。

我已经创建了外部ip地址和localhost的所有权限的用户kamil。当我运行:选择用户,主机从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,我需要一个不同的主机?

编辑:
主机文件

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的套接字不能用于连接,可能是因为它不存在(错误号2)。

MySQL Documentation

On Unix, MySQL programs treat the host name localhost specially, in a
way that is likely different from what you expect compared to other
network-based programs. For connections to localhost, MySQL programs
attempt to connect to the local server by using a Unix socket file.
This occurs even if a –port or -P option is given to specify a port
number. To ensure that the client makes a TCP/IP connection to the
local server, use –host or -h to specify a host name value of
127.0.0.1, or the IP address or name of the local server. You can also specify the connection protocol explicitly, even for localhost, by
using the –protocol=TCP option.

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

>您可以使用TCP / IP而不是Unix套接字。您将在连接时使用127.0.0.1而不是本地主机执行此操作。尽管如此,Unix套接字可能会更快更安全。
>您可以更改php.ini中的套接字:打开MySQL配置文件my.cnf以找到MySQL创建套接字的位置,并将PHP的mysqli.default_socket设置为该路径。在我的系统上,它是/var/run/mysqld/mysqld.sock。
>打开连接时,直接在PHP脚本中配置套接字。例如:

$db = new MySQLi('localhost', 'kamil', '***', '', 0, 
                              '/var/run/mysqld/mysqld.sock')

转载注明原文:php – mysqli :: mysqli():( HY000/2002):无法通过套接字’MySQL’连接到本地MySQL服务器(2) - 代码日志