0

これもstackexchangeで尋ねましたが、構成ではなくプログラミングの問題のように見え始めています

Cakephp を実行している centos サーバーは、リモートの mysql サーバーにアクセスできませんが、ケーキの外部で pdo connect を介してアクセスできます

同じ資格情報とオプションを使用して、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経由で接続できることがわかっているので、これは役に立ちません

自宅のコンピューターのケーキインスタンスからリモートで接続できますが、問題はありません 同じホスト 同じ資格情報 すべて同じ

それでも、すべての適切なmysqlパッケージがインストールされたケーキを実行している私のcentos Apacheサーバーは接続できません

正しいユーザー名パスワードポートすべてを使用していますが、そのエラーが発生し続けます

tmp フォルダのキャッシュをクリアしました apc を使用してキャッシュをクリアしました httpd を再起動しました

私はすべてをやった。何も機能しません。

両方のマシンでファイアウォールを一時的にシャットダウンしようとしたイベントがあります...サイコロ同じエラーはありません

pdoを使用してdbに接続し、コマンドラインから実行するだけのphpファイルを作成してみましたが、Connected to Databaseと表示されます!!

なぜケーキはケーキからできないのか。明らかに、単独のphpファイルから機能します

資格情報とホストを何度も確認しました

ここでも、ローカル マシンでまったく同じコードベースを使用して接続できます

だから、ミステリーケーキやcentos apacheのようなものが必要です

また、mysqld を再起動する APC を実行していますが、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 は機能します。同じサーバーと通信するまったく同じコードベースを実行している私のローカルPCは機能します。

4

1 に答える 1

2

SELINUXが犯人でした。無効にして再起動するとすぐに、すべて問題ありませんでした。難読化を支援するために /opt で Web 仮想ホストを実行していましたが、Apache にログへの書き込みアクセス権を付与したり、アップロードしたり、すべてが SELINUX のせいであったことを知っていると、それは私の最大の苦痛のようです。Cake が問題なく通信できるデータベースと通信することさえ妨げていました。

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 も同様です。

于 2012-09-23T19:48:04.777 に答える