PHP MySQLi 权限被拒绝但从 MySQL CLI 工作

标签 php mysql apache selinux

我收到了错误

Failed to connect to MySQL: Permission denied

从带有 MySQL、MySQLi 和 PDO 的 PHP 连接到远程 MySQL 主机时。

但是,如果我连接到同一台主机,通过 MySQL 从同一台主机在命令行上使用相同的凭据,它会完美运行。

所以我假设它是一个 PHP 配置问题?

连接自

PHP 5.6.40 (Client API version => mysqlnd 5.0.11-dev)

MySQL 5.5.59

连接到

PHP 5.6.23 (Client API version => mysqlnd 5.0.11-dev)

MySQL 5.5.52

有人知道为什么我可以从命令行连接到 MySQL 但不能从 PHP 连接到具有完全相同凭据的同一主机吗?

最佳答案

我猜你的服务器上启用了 SELinux。 默认情况下,它不允许 apache 进程初始化传出网络连接。

https://serverfault.com/a/456875/442205 的回答副本

检查 SELinux

sestatus

查看在 httpd 进程上设置了哪些标志

getsebool -a | grep httpd

允许Apache通过SELinux连接远程数据库

setsebool httpd_can_network_connect_db 1

使用 -P 选项使更改永久化。如果没有此选项, bool 值将在重新启动时重置为 0。

setsebool -P httpd_can_network_connect_db 1

关于PHP MySQLi 权限被拒绝但从 MySQL CLI 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57270169/

相关文章:

php - 我们如何在 PHP 生成的 CSV 文件上添加空格?

javascript - 与 ID 项建立链接

php - 为什么 PHP 中的 LSP 违规有时是致命的,有时是警告?

mysql - 内连接两个表,都有外键但没有主键?

Mysql:显示用户关注的所有用户,如果我也关注该用户,则添加动态列

apache - Varnish、Nginx、SSL - IP 检测问题

php - 阻止访问 php.ini 文件

php - 为什么我会收到 MySQL 错误 1062?

regex - 如何使用正则表达式执行proxypassreverse

python - 从特定行中选择特定列(Python - MySQL)