运行cakephp的centos服务器无法访问远程mysql服务器,但可以通过pdo connect访问cake

时间:2012-09-22 23:09:24

标签: mysql cakephp

我在stackexchange上也问了这个,但它开始看起来更像编程问题而不是配置

运行cakephp的centos服务器无法访问远程mysql服务器,但可以通过pdo connect访问cake

我可以使用相同的凭据和选项使用mysql命令行客户端进行连接。但是,当蛋糕尝试连接到远程服务器时,我得到的只是

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;

这对我没有帮助,因为我知道我可以通过cli连接

我可以从我的家用电脑蛋糕实例远程连接,没有问题同一主机相同的凭据相同的一切

然而我的centos apache服务器运行的蛋糕上安装了所有正确的mysql包无法连接

我正在使用正确的用户名密码端口所有内容并且我一直收到该错误

我已经清除了tmp文件夹缓存我使用apc来清除缓存我甚至重新启动了httpd

我做了一切。什么都行不通。

我试过暂时关闭两台机器上的防火墙......没有骰子错误

我甚至尝试创建一个只使用pdo连接到数据库并从命令行运行它的php文件,它说连接到数据库!!

为什么不能用蛋糕做蛋糕。它显然可以从一个独立的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();
}

// console output

Connected to database[root@localhost ~]# service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]
[root@localhost ~]# php connectInt.php
Connected to database[root@localhost ~]#

所以我很酷,让我们再试一次网站。

Error: SQLSTATE[HY000] [2003] Can't connect to MySQL server on 'subdomian.domain.com' (13) requires a database connection

没有效果

我甚至在php中尝试了其他方法我使用相同的凭据进行了正常的mysql连接脚本,它可以连接它可以查看所有数据库。

<?php
$hostname = "dns.name.com";
$username = "mygoodtestednonrootuser";
$password = "somepasswoerd";

try {
  $db = new PDO("mysql:host=$hostname;dbname=int_zzipline", $username, $password);

$link = mysql_connect($hostname, $username, $password);
$db_list = mysql_list_dbs($link);
while ($row = mysql_fetch_object($db_list))
{
    echo 'Connected to database';
    echo $row->Database . "\n";
}   

}
catch(PDOException $e) {
  echo $e->getMessage();
}
?>


[root@localhost ~]# php connectInt.php
information_schema
mydbname1
myotherdb
mysql
test

所以我很酷,让我们再试一次网站

Error: SQLSTATE[HY000] [2003] Can't connect to MySQL server on 'subdomian.domain.com' (13) requires a database connection

这至少可以说是令人生气的。

因此,cakephp不喜欢连接到同一子网中的其他Linux服务器而没有启用任何防火墙,但任何其他使用相同凭据执行的php都可以工作。我的本地电脑运行与同一服务器通话完全相同的代码库。

1 个答案:

答案 0 :(得分:2)

SELINUX是罪魁祸首。一旦我禁用它并重新启动一切都很好。我在/ opt中运行我的web虚拟主机以帮助进行混淆,但是看起来我最痛苦的是你知道什么是简单的东西,例如给apache写入日志,上传,一切都是因为SELINUX。它甚至阻止了蛋糕与它可以交谈的数据库交谈,否则没有问题。

我知道centos作为老板是安全的,但现在我知道为什么。 SELINUX

了解它,它做了什么,并发现一个世界,让centos不再想要顽固SELinux是CentOS的小朋友,它将覆盖你的屁股,而不是破坏你的球。

随着权力的到来,责任重大。当我克服这个问题时,我将开始重新配置我的服务器以负责任地使用SELINUX,而不是在不知道我使用它的情况下使用它。哦,当然还有解决方案:

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#       enforcing - SELinux security policy is enforced.
#       permissive - SELinux prints warnings instead of enforcing.
#       disabled - SELinux is fully disabled.
#SELINUX=enforcing
SELINUX=disabled
# SELINUXTYPE= type of policy in use. Possible values are:
#       targeted - Only targeted network daemons are protected.
#       strict - Full SELinux protection.
SELINUXTYPE=targeted
SETLOCALDEFS=0

哦,我差点忘了...... 你可以在/ ect / selinux中找到配置文件

只是改变你的样子,你应该能够做任何你喜欢的事情。但h4x0rz也是如此