2010-11-02 5 views
52

J'ai une situation étrange dans le serveur nouvellement installé, et il semble que Google ne peut pas m'aider cette fois. Je ne peux pas me connecter à mysql (distant) à partir de mon code php. Lorsque j'essaie de me connecter à partir de la ligne de commande sur le même serveur, la connexion est réussie.php ne peut pas se connecter à mysql avec l'erreur 13 (mais la ligne de commande peut)

Impossible de se connecter: Impossible de se connecter au serveur MySQL sur 'mysql.server' (13)

Voici le code et la tentative de connexion de la ligne de commande

[[email protected] httpdocs]$ cat test.php 

<? 
$link = mysql_connect('MYSQL.SERVER', 'testusersimon', '123456'); 
if (!$link) { 
    die('Could not connect: ' . mysql_error()); 
} 
echo 'Connected successfully'; 
mysql_close($link); 
?> 

[[email protected] httpdocs]$ mysql -h MYSQL.SERVER -utestusersimon --password=123456 
Welcome to the MySQL monitor. Commands end with ; or \g. 
Your MySQL connection id is 352108 
Server version: 5.0.45-community-nt-log MySQL Community Edition (GPL) 

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. 
This software comes with ABSOLUTELY NO WARRANTY. This is free software, 
and you are welcome to modify and redistribute it under the GPL v2 license 

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 

mysql> quit 
Bye 

J'ai essayé d'exécuter le script php en mode mod_php et dans FastCGI, vérifiez que "/etc/php.d/mysql.ini" apparaît dans les sections phpinfo() ainsi que mysql, mysqli et pdo_mysql.

mais le résultat était le même, je sais que c'est quelque chose de simple mais je ne peux pas. S'il vous plaît aider :)

Edit: Le problème était avec SELinux

setsebool -P httpd_can_network_connect_db=1 

était la solution.

+0

vous utilisez quel OS? – Thariama

+0

Fedora11 le serveur distant est Win2k8 – SimSimY

Répondre

114
setsebool -P httpd_can_network_connect=1 

sera également une commande CLI utile à de nombreuses personnes qui visitent cette question, à autoriser les requêtes de connexions mysql_connet() dans HTTP (Apache) vers un serveur de base de données MySQL à distance, assurez-vous d'activer les connexions de réseau de httpd en SElinux généralement situé dans/etc/selinux/config (désactivé par défaut pour empêcher les pirates d'attaquer d'autres machines en utilisant votre httpd).

+0

Comme je l'ai dit dans mon précédent commentaire - c'était en effet lié à SELinux. – SimSimY

+0

Lorsque la ligne de commande essayé fonctionne, mais quand Apache l'exécute l'erreur est "Attention: mysql_connect(): [2002] Permission refusée (essayant de se connecter via tcp: //w.x.y.z: 3306)". Oui c'est lié à SELinux. Vraiment nous avons essayé tellement de choses différentes. Merci beaucoup @thesimon –

+1

J'ai désactivé si souvent Selinux, que je ne reconnais pas les erreurs d'autorisation liées Selinux chaque fois que j'en vois un. Merci pour l'indice. – pdwalker

26

sur CentOS 6, vous pouvez utiliser les éléments suivants (sans -P)

setsebool httpd_can_network_connect=1 
+4

vous m'a sauvé de l'enfer, merci beaucoup –

+1

sauvé..me ... homme! – skidadon

2

sur Fedora 21 avec apache 2/version httpd 2.6 en utilisant la version php 5.6 lors de la connexion à un serveur MySQL 5.6 ou version MariaDB 10 Il semble même être un problème de connexion au serveur local lors de la spécification du nom de domaine complet du serveur au lieu de localhost dans le code php.

Cette commande résoudra le problème des autorisations pour la session en cours:

setsebool httpd_can_network_connect_db on 

Pour rendre la solution permanente pour les redémarrages ultérieurs que vous devez faire ceci:

setsebool -P httpd_can_network_connect_db on 

Merci à tous sur cette question pour me sauver de "permission refusée" enfer. :)

Questions connexes