我收到此错误,不知道原因
SQLSTATE[HY000] [2002] Permission denied
这是我正在尝试上传文件的网站example.com
。
发生这种情况是因为 selinux 避免了从 httpd 服务器到远程数据库服务器的数据库连接。要解决此问题,您需要通过 ssh 访问您的服务器,或者如果您有预授权访问权限,则只需打开控制台并执行以下操作:
您必须检查 SELinux 是否管理端口 80。您可以通过键入
# semanage port -l | grep http_port_t
来查看列表并检查:
http_port_t tcp 443, 488, 8008, 8009, 8443, 9000
如果需要添加所需端口,只需输入:
# semanage port -a -t http_port_t -p tcp 80
再次输入命令进行检查:
# semanage port -l | grep http_port_t
.
http_port_t tcp 80, 443, 488, 8008, 8009, 8443, 9000
然后你应该通知SELinux你想要允许从httpd服务器到db远程服务器的网络连接,设置它的布尔变量:
# service httpd stop
# setsebool httpd_can_network_connect 1
# setsebool httpd_can_network_connect_db 1
# service httpd start
现在您的 httpd 服务应该能够从数据库服务器获取数据。
这些更改在重新启动后不会保留。要使它们永久存在,请执行以下操作:
# service httpd stop
# setsebool -P httpd_can_network_connect 1
# setsebool -P httpd_can_network_connect_db 1
# service httpd start
区别在于“-P”标志。
我希望这对搜索解决此类错误的人有用。
进入 .env 文件并将 DB_HOST=127.0.0.1 更改为 DB_HOST=localhost
如果 Apache 无法连接到远程 MySQL 服务器,而同一服务器上的 mysql 命令行工具可以,则可能有多种原因造成这种差异。您可以采取以下一些步骤来解决该问题:
检查 MySQL 用户权限: 确保 Apache 使用的 MySQL 用户具有从 Apache 服务器连接所需的权限。有时,用户权限可能仅限于本地主机。
检查 MySQL 主机限制: 验证 MySQL 服务器是否配置为接受来自 Apache 服务器 IP 地址的连接。有时,MySQL 配置为仅接受来自特定 IP 地址的连接。
防火墙设置: 确保没有防火墙规则阻止从 Apache 服务器到 MySQL 服务器的传出连接。
MySQL 配置: 检查 MySQL 服务器的配置文件(通常为 my.cnf 或 my.ini),确保其配置为接受远程连接并正在侦听正确的网络接口。
网络连接:确认不存在阻止 Apache 服务器访问 MySQL 服务器的网络问题。您可以使用 ping 或 telnet 等工具来测试连接性。
检查 Apache 配置: 检查 Apache 配置文件以确保正确指定连接详细信息(例如主机名、端口、用户名、密码)。
MySQL 错误日志: 检查 MySQL 错误日志中是否有任何相关错误消息,这些消息可能表明来自 Apache 的连接被拒绝的原因。
SELinux 或 AppArmor: 如果在 Apache 服务器上启用了 SELinux 或 AppArmor,则可能会阻止 Apache 进行传出网络连接。检查日志并根据需要调整安全策略。
通过系统地检查这些要点,您应该能够识别并解决阻止 Apache 连接到远程 MySQL 服务器的问题。
我可能迟到了回答这个问题,但对我有用的是命令。 我遇到了同样的问题,然后运行了以下命令。
提供权限:
chmod -R 777 .
(虽然不推荐)
运行安装升级命令
php bin/magento setup:ugrade
最后编译命令
php bin magento setup:di:compile
也许你需要关闭你的selinux 就像这样
setenforce 0