连接数据库错误类型:2002:权限被拒绝

Posted

技术标签:

【中文标题】连接数据库错误类型:2002:权限被拒绝【英文标题】:Connect DATABASE Error TYPE: 2002: Permission denied 【发布时间】:2017-05-01 22:02:35 【问题描述】:

我正在尝试使用以下脚本(cxn-test.php)连接数据库

<?php
$host = '155.30.136.20';//dummy ip 
$user = 'abc_user';
$pass = 'xxxxxxxxx';
$dbname = 'welcome';
$link = mysqli_connect($host, $user, $pass,$dbname);
if (!$link) 
    echo "Error: Unable to connect to MySQL." . PHP_EOL;
    echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
    echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
    exit;
else 
    echo "success" . PHP_EOL;

当我在终端上尝试时

php cxn-test.php //成功

但是当我在本地主机上尝试时,我收到以下错误,

curl -s http://localhost/cxn-test.php

Error: Unable to connect to MySQL. Debugging errno: 2002 Debugging error: Permission denied

这是一个奇怪的问题,它不能在 localhost 上运行,但在命令行上运行良好。

【问题讨论】:

数据库在哪里?它在 Docker 容器中吗?你试过mysqli或PDO mysql吗? 它位于我正在使用 ip 远程连接的另一台服务器中 通过命令行访问它时,您是通过 ssh 连接到远程服务器,还是与运行 localhost 的计算机相同? 仅限远程服务器 【参考方案1】:

在获得运行 SELinux 的新 CentOS 7 机器后,我遇到了同样的问题。我可以从命令行连接到我的远程 MySQL 数据库服务器,但 Drupal(和测试 PHP 脚本)不能。

问题出在 SELinux 安全策略上。

默认情况下,策略 httpd_can_network_connect_db 被禁用(意味着您的网络服务器无法联系远程数据库。)

通过以下方式检查:

getsebool -a | grep httpd

如果 httpd_can_network_connect_db 关闭,请通过以下方式启用:

setsebool -P httpd_can_network_connect_db 1

(-P 标志使更改永久生效,因此该设置在重新启动后仍然有效。)

【讨论】:

很好,+1 没有告诉人们关闭 SELinux! 我遇到了同样的问题,只能通过禁用 SELinux 来解决。感谢您的评论突出显示它 像魅力一样工作。向你致敬。 带我永远找到这个(使用 Redhat)。非常感谢。 对于任何试图从 Digital Ocean Droplet 远程连接到 AWS 实例的人,除了实例上的这些步骤之外,在 Droplet 上这是必要的:***.com/questions/9766014/…

以上是关于连接数据库错误类型:2002:权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 项目中收到“SQLSTATE [HY000] [2002] 连接被拒绝错误”

SQLSTATE[HY000] [2002] 使用 whereHas 时 laravel 中的连接被拒绝错误

Laravel:SQLSTATE [HY000] [2002] 连接被拒绝

Symfony4 / Docker:SQLSTATE [HY000] [2002]连接被拒绝

连接到 Amazon AWS:权限被拒绝

Laravel 7 SQLSTATE [HY000] [2002] 连接被拒绝