通过 localhost 连接 MySQL 无效,但 127.0.0.1 有效
Connect MySQL through localhost not working but 127.0.0.1 is working
OS: Ubuntu 14.04 LTS
php 版本控制: phpbrew
php 版本: 5.5.10
我对解析为 127.0.0.1 的本地主机执行了 ping 操作。
这表明我的主机(/etc/hosts)文件是正确的。
127.0.0.1 localhost
每当我尝试使用如下所示的 php 脚本连接到 MySQL 时,它都不起作用并给我错误:没有这样的目录。
//connect to the database
mysql_connect("localhost","root","password") or die(mysql_error());
但是,当我通过 127.0.0.1 连接时它会工作
//connect to the database
mysql_connect("127.0.0.1","root","password") or die(mysql_error());
此外,我的 phpmyadmin 在使用 "localhost" 登录时不起作用,我不得不更改文件以在登录期间添加 127.0.0.1 选项。
如何使用本地主机连接到 MySQL 数据库?
这个问题的答案是 my.cnf 位于
/etc/mysql/my.cnf
该行是
bind-address = 127.0.0.1
或
bind-address = localhost
应该是
bind-address = 0.0.0.0
这将允许所有连接
在许多情况下,localhost
是使用 UNIX 套接字连接到 MySQL 服务器进程的提示,其中 127.0.0.1
强制建立 TCP 连接。有时 UNIX 套接字位于意想不到的位置,或者根本无法访问,这会导致 "file not found" 错误。
插座通常类似于 /tmp/mysql.sock
,也可能位于其他位置,具体取决于您的发行版以及您对其进行了多少定制。
请记住,通过定义为服务器本地的 UNIX 套接字访问和 TCP 由两个不同的规则控制。 GRANT
中的 localhost
指的是 UNIX 套接字。 %
或某些特定的主机名是指通过 TCP 进行远程访问。
PHP 仍在尝试使用默认套接字位置。如果您 将 MariaDB/MySQL 文件夹 从 /var/lib/mysql 移动到另一个位置,就会出现此问题。为了解决这个问题,您必须在 /etc/php.ini 文件中定义新套接字的位置。
mysqli.default_socket =/newDBLocation/mysql/mysql.sock
注意,根据您使用的驱动程序,您可能必须指定 pdo_mysql.default_socket=!
为了检查您的当前目录运行,在mysql中执行以下命令:
select @@datadir;
OS: Ubuntu 14.04 LTS
php 版本控制: phpbrew
php 版本: 5.5.10
我对解析为 127.0.0.1 的本地主机执行了 ping 操作。
这表明我的主机(/etc/hosts)文件是正确的。
127.0.0.1 localhost
每当我尝试使用如下所示的 php 脚本连接到 MySQL 时,它都不起作用并给我错误:没有这样的目录。
//connect to the database
mysql_connect("localhost","root","password") or die(mysql_error());
但是,当我通过 127.0.0.1 连接时它会工作
//connect to the database
mysql_connect("127.0.0.1","root","password") or die(mysql_error());
此外,我的 phpmyadmin 在使用 "localhost" 登录时不起作用,我不得不更改文件以在登录期间添加 127.0.0.1 选项。
如何使用本地主机连接到 MySQL 数据库?
这个问题的答案是 my.cnf 位于
/etc/mysql/my.cnf
该行是
bind-address = 127.0.0.1
或
bind-address = localhost
应该是
bind-address = 0.0.0.0
这将允许所有连接
在许多情况下,localhost
是使用 UNIX 套接字连接到 MySQL 服务器进程的提示,其中 127.0.0.1
强制建立 TCP 连接。有时 UNIX 套接字位于意想不到的位置,或者根本无法访问,这会导致 "file not found" 错误。
插座通常类似于 /tmp/mysql.sock
,也可能位于其他位置,具体取决于您的发行版以及您对其进行了多少定制。
请记住,通过定义为服务器本地的 UNIX 套接字访问和 TCP 由两个不同的规则控制。 GRANT
中的 localhost
指的是 UNIX 套接字。 %
或某些特定的主机名是指通过 TCP 进行远程访问。
PHP 仍在尝试使用默认套接字位置。如果您 将 MariaDB/MySQL 文件夹 从 /var/lib/mysql 移动到另一个位置,就会出现此问题。为了解决这个问题,您必须在 /etc/php.ini 文件中定义新套接字的位置。
mysqli.default_socket =/newDBLocation/mysql/mysql.sock
注意,根据您使用的驱动程序,您可能必须指定 pdo_mysql.default_socket=!
为了检查您的当前目录运行,在mysql中执行以下命令:
select @@datadir;