当我试图使用php mysqli类连接到mysql数据库时,会出现此错误。使用以下代码:
$db = new MySQLi("localhost","kamil","*****");密码是*用于安全。
我已经使用外部ip地址和本地主机上的所有特权创建了用户kamil。当我运行:select user,host from mysql.user时,它正确地显示了这两个用户。
我做了一些研究,并使用这个基准:https://stackoverflow.com/a/2183134/1839439来查看它连接到什么。事实证明,它只能连接到本地主机127.0.0.1和127.0.0.1:3306,但是当我提供localhost时,它会抛出这个错误。
我的问题是,为什么它只允许我使用本地主机ip地址而不是名称或外部ip连接到DB。如果我想在网站上使用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 raspberrypiMysql用户表结果为该用户:
| kamil | 109.255.177.28 |
| kamil | localhost |发布于 2012-12-07 21:24:13
当您只使用"localhost“时,MySQL客户端库尝试使用Unix域套接字来连接,而不是使用TCP/IP连接。错误告诉您,名为MySQL的套接字不能用于连接,可能是因为它不存在(错误号2)。
在Unix上,MySQL程序特别对待主机名localhost,这种方式可能与其他基于网络的程序不同。对于到本地主机的连接,MySQL程序试图使用Unix文件连接到本地服务器。即使给出一个-端口或-P选项来指定端口号,也会发生这种情况。要确保客户端与本地服务器建立TCP/IP连接,请使用--host或-h指定主机名值为127.0.0.1,或指定本地服务器的IP地址或名称。您还可以使用-- protocol =TCP选项显式地指定连接协议,甚至对于localhost也是如此。
解决这个问题有几种方法。
127.0.0.1而不是localhost来实现这一点。不过,Unix套接字使用起来可能更快、更安全。php.ini中更改套接字:打开MySQL配置文件my.cnf以查找MySQL创建套接字的位置,并将PHP的mysqli.default_socket设置为该路径。在我的系统里是/var/run/mysqld/mysqld.sock。发布于 2017-04-26 07:47:04
如果是PHP问题,您可以简单地修改配置文件php.ini,并更新端口/套接字路径等的设置,以使其连接到服务器。
在我的例子中,我打开了文件php.ini
mysql.default_socket = /var/run/mysqld/mysqld.sock
mysqli.default_socket = /var/run/mysqld/mysqld.sock它马上就起作用了。我不得不承认,我从@Joni接受的答案中得到了暗示
发布于 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)。
此外,确保允许您的用户连接到您试图选择的任何数据库。
https://stackoverflow.com/questions/13769504
复制相似问题