我的问题很可能是用户权利问题。
我有一个php脚本,使用PDO连接到sphinx db。
$sp = new PDO('mysql:host=127.0.0.1;port=9306;dname=', '', '');
当我使用root帐户从终端运行它时,它可以正常工作。但, 当我尝试通过浏览器以用户apache运行它时,我收到以下错误:
[Thu Mar 20 11:22:51 2014] [error] [client 98.12.26.274] PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2003] Can't connect to MySQL server on '127.0.0.1' (13)' in /var/www/html/surveys/test.php:3\nStack trace:\n#0 /var/www/html/surveys/test.php(3): PDO->__construct('mysql:host=127....', '', '')\n#1 {main}\n thrown in /var/www/html/surveys/test.php on line 3
必须有一些东西缺少propoer用户权限,但我不知道我需要哪些文件才能为此工作提供权利。
更新: 我意识到selinux阻止了端口。如何使用selinux为apache启用该端口?
答案 0 :(得分:1)
只使用套接字而不是IP地址? See the manual for an example。这完全绕开了网络堆栈。
添加类似
的内容listen=/tmp/mysql_sphinx.sock
进入sphinx.cnf并将相同的套接字放入PDO的DNS中,如
$db = new PDO('mysql:dbname=testdb;unix_socket=/tmp/mysql_sphinx.sock');
这使您无需通过网络访问MySQL。考虑到安全性,这样做会更好。