2010-11-02 30 views
52

Tengo una situación extraña en el servidor recién instalado, y parece que Google no puede ayudarme esta vez. No me puedo conectar a mysql (remoto) desde mi código php. Cuando trato de conectarme desde la línea de comando en el mismo servidor, la conexión se realiza satisfactoriamente.php no se puede conectar a mysql con error 13 (pero la línea de comandos puede)

No se pudo conectar: ​​No se puede conectar al servidor MySQL en 'mysql.server' (13)

Aquí está el código y el intento de conexión desde la línea de comandos

[[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 

Intenté ejecutar el script php tanto en modo mod_php como en FastCGI, , compruebe que "/etc/php.d/mysql.ini" aparece en las secciones phpinfo() y mysql, mysqli y pdo_mysql.

pero el resultado fue el mismo, sé que es algo simple pero no puedo. Por favor ayuda :)

Editar: El problema era con SElinux

setsebool -P httpd_can_network_connect_db=1 

era la solución.

+0

¿estás utilizando qué sistema operativo? – Thariama

+0

Fedora11 el servidor remoto es Win2k8 – SimSimY

Respuesta

114
setsebool -P httpd_can_network_connect=1 

también será un comando CLI útil para muchas personas que visitan esta cuestión, como para permitir mysql_connet() conexiones desde el interior de HTTP (Apache) peticiones a un servidor de base de datos MySQL remoto, asegúrese de permitir conexiones de red de httpd en SElinux generalmente se encuentra en/etc/selinux/config (deshabilitado por defecto para evitar que los piratas informáticos ataquen otras máquinas usando su httpd).

+0

Como dije en mi comentario anterior, esto sí estaba relacionado con SELinux. – SimSimY

+0

Cuando se prueba la línea de comandos, funciona, pero cuando Apache lo ejecuta, el error es "Advertencia: mysql_connect(): [2002] Permiso denegado (intentando conectarse a través de tcp: //w.x.y.z: 3306)". Sí, está relacionado con SELinux. Realmente probamos muchas cosas diferentes. Muchas gracias @thesimon –

+1

He apagado selinux tan a menudo, que no reconozco los errores de permisos relacionados con selinux cada vez que veo uno. Gracias por la pista. – pdwalker

26

en CentOS 6, puede utilizar lo siguiente (sin -P)

setsebool httpd_can_network_connect=1 
+4

me salvaste del infierno, muchas gracias –

+1

guardado ... ¡me ... hombre! – skidadon

2

En Fedora 21 con Apache 2/versión httpd 2.6 utilizando php versión 5.6 cuando se conecta a un servidor remoto MySQL 5.6 o versión MariaDB 10 Incluso parece ser un problema conectarse al servidor local al especificar el FQDN del servidor en lugar de localhost en el código php.

Este comando se solucionará el problema de los permisos para la sesión actual:

setsebool httpd_can_network_connect_db on 

Para hacer que la solución permanente para los reinicios posteriores que hay que hacer esto:

setsebool -P httpd_can_network_connect_db on 

Gracias a todos sobre esta cuestión por rescatarme del infierno "permiso denegado". :)

Cuestiones relacionadas