Apache无法连接到远程MySQL,但从同一台服务器的MySQL命令行可以

症状:

  • 我正在运行CentOS 6。
  • 我可以从命令行连接到远程MySQL: mysql -h abcd -u user -p -D db
  • 运行在本地命令行上的Laravel artisan命令也可以连接: artisan migrate
  • 但是,通过Apache运行时相同的Laravel代码无法连接。
  • 错误是: SQLSTATE[HY000] [2003] Can't connect to MySQL server on 'abcd' (13)
  • MySQL帮助“拒绝访问”的原因没有帮助。

我究竟做错了什么? (我为自己的后代回答。)

这个问题的关键是(13) ,意思是“Permission Denied”(通过perror )。 因为我可以从命令行进行连接,所以权限必须位于Web应用程序中。 由于我知道Web应用程序中的证书与命令行中的证书相匹配,唯一剩下的就是Web服务器。

通过strace ,我发现SELinux阻止了它。 修理:

sudo setsebool -P httpd_can_network_connect=1

这永久设置SELinux允许networking连接的httpd。