mysql logo 2800x2800 pixels1

Una de las cosas que nos puede causar un dolor de cabeza, y quizas no es tan facil de encontrar en google es cuando PHP rehusa conectarse a un servidor remoto MySQL mostrando el error:

SQLSTATE[HY000][2003]Can't connect to MySQL server on 'xxx.xxxx.xxx.xxx' (13)

Luego de hacer una prueba de conexión con el shell local y ver que se realiza la conexión correctamente, el primer pensamiento que se me ocurre es que hay algo mal en la última actualización del framework que estoy utilizando, pero después de un tiempo me di cuenta que la respuesta es muy simple.

SELinux está bloqueando las conexiones remotas desde scripts PHP ejecutados por un servidor web Apache. El código de error (13) al final del mensaje de error significa “permiso denegado” por lo cual es la indicación de que existe un bloqueo.

Como les había comentado la solución es sencilla: deben loguearse al servidor remoto como root y ejecutar el siguiente comando:

setsebool -P httpd_can_network_connect=1

y el problema estará solucionado.

Por supuesto, piense dos veces antes de ejecutar este comando porque harás tu servidor web un poco menos seguro, así que no hagas eso a menos que estés seguro de que lo necesite.