mysql - 运行cakephp的centos服务器无法访问远程mysql服务器,但可以通过cake外部的pdo连接进行访问

标签 mysql cakephp

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

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

我可以使用相同的凭据和选项使用 mysql 命令行客户端进行连接。但是,当 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;

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

我可以从我的家庭计算机远程连接蛋糕实例,没有任何问题相同的主机相同的凭据相同的一切

然而我的 centos apache 服务器运行 cake 并安装了所有正确的 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();
}

//控制台输出

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 都可以工作。我的本地电脑运行完全相同的代码库,与同一台服务器进行通信。

最佳答案

SELINUX 是罪魁祸首。一旦我禁用它并重新启动,一切都很好。我在/opt 中运行我的网络虚拟主机来帮助混淆,但它似乎是我最大的痛苦,你知道什么一直以来简单的东西,比如给 apache 写日志、上传的权限,一切都是因为 SELINUX。它甚至阻止 cake 与数据库对话,否则它可以毫无问题地对话。

我知道 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 也会如此

关于mysql - 运行cakephp的centos服务器无法访问远程mysql服务器,但可以通过cake外部的pdo连接进行访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12548416/

相关文章:

mysql - 在 MySQL 5.6 中启用日志会阻止服务器启动

php - jquery datepicker刷新页面数据

php - 在 CakePHP 中更改语言

jquery - CakePHP - 如何从 Controller 操作返回字符串(如 JSON)到 Ajax 请求

mysql - CakePHP - 查找并计算存在多少关联记录

Mysql排除星期六另一个值等于

php - 通过PHP将SQL转换为HTML表-为什么不起作用?

php - 如何在 Cakephp 中按行 ID 从箭头检索特定行

PHP 搜索功能不检索结果

php - 跨域 ajax 和 php session