微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

centos – SQLSTATE [HY000] [2003]无法连接到’127.0.0.1′(13)上的MySQL服务器但是’localhost’工作

当您尝试连接到地址127.0.0.1的MySQL时,Cent os Apache PHP PHP来自PHP,发生错误.如果将127.0.0.1行替换为localhost,一切都可以正常工作.浏览器中PHP的唯一问题.如果控制台执行

PHP -r "var_dump (MysqLi_connect ( '127.0.0.1', 'user', 'pass', 'db_name'))"

没有错误.另外,如果控制台进入

MysqL -u user -h 127.0.0.1 -p db_name

要么

MysqL -u user -h localhost -p db_name

一切顺利.可能是什么问题呢?

软件版本

> PHP-5.6.26
> MysqL-5.5.53
> Apache 2.2.15

最后,

$host localhost
localhost has address 127.0.0.1

PHP代码工作:

$dsn = 'MysqL:dbname=testdb;host=localhost';
$user = 'dbuser';
$password = 'dbpass';

try {
    $dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
    echo 'Connection Failed: ' . $e->getMessage();
}

PHP代码不工作:

$dsn = 'MysqL:dbname=testdb;host=127.0.0.1';
    $user = 'dbuser';
    $password = 'dbpass';

    try {
        $dbh = new PDO($dsn, $user, $password);
    } catch (PDOException $e) {
        echo 'Connection Failed: ' . $e->getMessage();
    }

sqlSTATE [HY000] [2003]无法连接到’127.0.0.1’上的MysqL服务器(13)

PHP代码工作:

$link = MysqLi_connect("localhost", "my_user", "my_password", "my_db");

PHP代码不工作:

$link = MysqLi_connect("127.0.0.1", "my_user", "my_password", "my_db");

解:

setsebool httpd_can_network_connect_db on

解决方法:

根据this (unaccepted) answer over on StackOverflow,原因是MysqL将localhost解释为127.0.0.1.这是confirmed in the documentation,请看段落开头,“在Unix上,MysqL程序专门处理主机名localhost”.

> 127.0.0.1是显式IPv4地址,因此客户端尝试通过TCP / IP进行连接
> localhost是使用本地主机的隐式提示,MysqL尽可能通过本地套接字而不是通过TCP / IP实现

由于您的localhost连接有效但127.0.0.1连接不起作用,因此其中一个问题似乎可能是罪魁祸首:

>您的数据库权限拒绝来自127.0.0.1的连接
>您有防火墙规则阻止TCP / IP上的所有入站数据库连接尝试
>您已更改MysqL的绑定配置条目,以便它不会绑定到环回地址

鉴于错误代码13(权限被拒绝),我会在其他两个之前调查其中的第一个.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐