运行 cakephp 的 centos 服务器无法访问远程 mysql 服务器,但可以通过 cake 外部的 pdo 连接进行访问
我可以使用 myslq 命令行客户端使用相同的凭据和选项进行连接。但是,当 cake 尝试连接到远程服务器时,我得到的只是
Error: SQLSTATE[HY000] [2003] Can't connect to MySQL server on 'subdomian.domain.com' (13) requires a database connection
我尝试运行这个
GRANT ALL PRIVILEGES ON *.* TO 'myrootuser'@'webserver.domain.com' WITH GRANT OPTION;
这对我没有帮助,因为我知道我可以通过命令行连接
我可以从家里的电脑远程连接蛋糕实例,没有任何问题,相同的主机,相同的凭据,相同的一切
但是我的 centos apache 服务器运行 cake,安装了所有正确的 mysql 包,却无法连接
我使用了正确的用户名密码端口,但仍然收到该错误
我已经清除了 tmp 文件夹缓存,我使用 apc 清除了缓存,我甚至重新启动了 httpd
我什么都做了。但毫无效果。
我甚至尝试过暂时关闭两台机器上的防火墙……但还是没有成功,错误依旧
我甚至尝试创建一个仅使用 pdo 连接到数据库的 php 文件并从命令行运行它,它显示已连接到数据库!
为什么 cake 不能从 cake 中做到这一点。它显然可以从一个单独的 php 文件中工作
我一遍又一遍地验证我的信誉和主机
我再次能够使用本地机器上完全相同的代码库进行连接
所以一定有类似神秘蛋糕或 centos apache 的东西
我也在运行 APC 重新启动 mysqld 和 httpd 并没有改变任何东西。我对这些胡言乱语感到束手无策。
这是我正在测试的 php 脚本
$hostname = "my.dns.name.tohost";
$username = "myrootuser";
$password = "myrootuserpass";
try {
$db = new PDO("mysql:host=$hostname;dbname=myDbSchemaName", $username, $password);
echo "Connected to database";
}
catch(PDOException $e) {
echo $e->getMessage();
}
// 控制台输出
Connected to database[root@localhost ~]# service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
[root@localhost ~]# php connectInt.php
Connected to database[root@localhost ~]#
我甚至尝试了 php 中的其他方法,我使用相同的凭据编写了一个普通的 mysql 连接脚本,它可以连接,它可以看到所有的数据库。
[root@localhost ~]# php connectInt.php
information_schema
mydbname1
myotherdb
mysql
test
因此,cakephp 不喜欢在未打开任何防火墙的情况下连接到同一子网中的其他 linux 服务器,但使用相同凭据执行的任何其他 php 都可以工作。运行完全相同代码库的本地电脑与同一台服务器通信也可以工作。
答案1
就我而言,Centos 阻止 httpd 与 MySQL 建立连接。
执行此
setsebool -P httpd_can_network_connect=1