连接数据库错误类型: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] 连接被拒绝