我们的数据库服务器具有对具有root用户的所有本地ip的授予访问权限,并且可以通过所有本地IP中的cli访问它们。但是在我们的网络服务器(不同的机器)中,Laravel仍然无法连接到数据库,这里是错误:
我已经尝试清除缓存,重新安装Laravel(安装编辑器,生成新密钥等)将db config驱动器更改为sqli,它仍然错误连接远程数据库,但为什么数据库工作时我通过查询数据库修补那台机器,这太不寻常了。
答案 0 :(得分:3)
如果您的MySQL数据库位于远程服务器上,则可能是以下问题之一:
防火墙阻止,具有MySQL服务的服务器可能位于防火墙后面,该防火墙设置为阻止对MySQL运行的端口的外部访问。
MySQL用户权限,如果MySQL服务不在防火墙后面,那么下一个原因可能是用户只有本地主机访问权限。
您应该尝试登录到远程服务器,并从那里通过一些shell命令连接到您的数据库以验证您实际可以。
答案 1 :(得分:0)
解决:php can't connect to mysql with error 13 (but command line can)
现在,Laravel可以通过在数据库服务器中执行:setsebool httpd_can_network_connect=1
来连接数据库。但我仍然不明白为什么。有没有合理的解释?
答案 2 :(得分:0)
安全增强型Linux(SELinux)是一个Linux内核安全模块,它提供了一种支持访问控制安全策略的机制,包括美国国防部式的强制访问控制(MAC)。 / p>
httpd_can_network_connect(HTTPD服务) ::允许HTTPD脚本和模块连接到网络。
以root身份运行:
# setsebool -P httpd_can_network_connect 1