Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problema PHP - Conexión MySql

Estas en el tema de Problema PHP - Conexión MySql en el foro de PHP en Foros del Web. Hola a todos, os pido ayuda a ver si me podéis ayudar con esto. Os hago primero la explicación para poneros en situación y al ...
  #1 (permalink)  
Antiguo 02/09/2014, 06:34
 
Fecha de Ingreso: septiembre-2014
Ubicación: Las Palmas
Mensajes: 2
Antigüedad: 9 años, 7 meses
Puntos: 0
Pregunta Problema PHP - Conexión MySql

Hola a todos, os pido ayuda a ver si me podéis ayudar con esto. Os hago primero la explicación para poneros en situación y al final del post la pregunta.

Tengo un servidor con una central telefónica Asterisk de alta disponibilidad. Cada llamada que se lanza ejecuta un script en php. Básicamente ese script lo que hace es realizar una serie de consultas a una base de datos y devuelve unas variables a Asterisk indicándole si el usuario puede realizar esa llamada, por que proveedor debe salir, etc. Ademas de esto el script también guarda un log con todo el proceso de ejecución.

Desde el pasado viernes, estoy teniendo problemas con cortes de red en el datacenter en el que está alojado el servidor de base de datos mysql, son cortes de 3 a 5 min de duración 4 o 5 veces al día.

Esto es lo que me arroja el log de una llamada.
El formato del log es:
Fecha#Hora Pid del servidor -[numero de linea del script] Log
Código:
02-09-14#13:06:28 32345-[493] ############## ################### #################
02-09-14#13:06:28 32345-[494] ############## INICIO PROCESO LLAMADA ############## 
02-09-14#13:06:28 32345-[495] ############## ################### #################
02-09-14#13:06:28 32345-[505] ORIGEN SIP URI : sip:[email protected]:5061
02-09-14#13:06:28 32345-[506] ORIGEN SIP BRI : 
02-09-14#13:06:28 32345-[507] ORIGEN SIP URO : 
02-09-14#13:06:28 32345-[508] ORIGEN SIP MAI : [email protected]:5060
02-09-14#13:06:28 32345-[509] ORIGEN SIP AGE : 
02-09-14#13:06:28 32345-[35] ################## FUNCION conectarDB ##################
02-09-14#13:07:31 32345-[50] ##### CONECTADO A LA BASE DE DATOS CORRECTAMENTE ####
02-09-14#13:07:31 32345-[54] ################## FUNCION conectarDB2 #################
02-09-14#13:07:31 32345-[69] ##### CONECTADO A LA BASE DE DATOS CORRECTAMENTE ####
02-09-14#13:07:31 32345-[514] EXISTE CONEXION CON LA BASE DE DATOS
02-09-14#13:07:31 32345-[535] Variable $script 	= script.php
Como se puede apreciar, desde que se inicia la conexión a la base de datos hasta que esta devuelve el ok, pasa mas de un minuto.
Esta es la función de conexión a la base de datos.

Código PHP:
//Realiza la conexion con las BD
function conectarDB()
{
    
$this->logueo('['.__LINE__.'] ################## FUNCION conectarDB ##################');
    
$this->conexionDB1 mysqli_connect("XXX.XXX.XXX.XXX","usuario","pass","basedatos");
    if(!
$this->conexionDB1)
    {
        
$this->logueo('['.__LINE__.'] ##### HAY UN ERROR DE CONEXION ####');
        
$this->logueo('['.__LINE__.'] ################## FUNCION conectarDB BACKUP ##################');
        
$this->conexionDB1 mysqli_connect("localhost","user","pass","basedatos");
        if(!
$this->conexionDB1)
        {
            
$this->noErrorConexionDB1 false;
            
$this->logueo('['.__LINE__.'] ##### HAY UN ERROR DE CONEXION A LA BASE DE DATOS DE BACKUP ####');
        }
    }
    else
    {
        
$this->logueo('['.__LINE__.'] ##### CONECTADO A LA BASE DE DATOS CORRECTAMENTE ####');
    }
    
    
$this->logueo('['.__LINE__.'] ################## FUNCION conectarDB2 ##################');
    
$this->conexionDB2 mysqli_connect("XXX.XXX.XXX.XXX","usuario","pass","basedatos2");
    if(!
$this->conexionDB2)
    {
        
$this->logueo('['.__LINE__.'] ##### HAY UN ERROR DE CONEXION A LA BD2####');
        
$this->logueo('['.__LINE__.'] ################## FUNCION conectarDB2 BACKUP ##################');
        
$this->conexionDB2 mysqli_connect("localhost","user","pass","basedatos2");
        if(!
$this->conexionDB2)
        {
            
$this->noErrorConexionDB2 false;
            
$this->logueo('['.__LINE__.'] ##### HAY UN ERROR DE CONEXION A LA BASE DE DATOS DE BACKUP ####');
        }
    }
    else
    {
        
$this->logueo('['.__LINE__.'] ##### CONECTADO A LA BASE DE DATOS CORRECTAMENTE ####');
    }
    return (
$this->noErrorConexionDB1 && $this->noErrorConexionDB2);

Como se puede apreciar, si falla la conexión con la base de datos externa, tengo un backup de dicha base de datos en local y el script podría ejecutarse y la llamada realizarse (aclarar, que se usa una base de datos externa para dejar los máximos recursos del servidor a Asterisk), pero el problema reside en que la conexión a la base de datos 1 se queda como en el limbo y mi pregunta es,

¿Hay alguna forma de limitar el tiempo de espera de respuesta de la conexión a la base de datos 1?
Por ejemplo si en 3 segundos no has conectado que conecte a la local.
Aceto también cualquier otra idea para solucionar el problema.

En el datacenter están trabajando en el problema, pero llevan así desde el viernes!

Un saludo y muchas gracias por adelantado.

PD: Obviamente se han omitido los usuarios y contraseñas reales, así como direcciones IP, etc.
PD2: La solución no pasa por cambiar el servidor de datacenter!
  #2 (permalink)  
Antiguo 02/09/2014, 10:03
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Problema PHP - Conexión MySql

Establece un timeout para la conexión: http://php.net/manual/en/mysqli.options.php
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 03/09/2014, 07:52
 
Fecha de Ingreso: septiembre-2014
Ubicación: Las Palmas
Mensajes: 2
Antigüedad: 9 años, 7 meses
Puntos: 0
Respuesta: Problema PHP - Conexión MySql

Muchísimas gracias, he tenido que cambiar varias cosas de mi script, pero ya parece que funciona perfectamente.

Etiquetas: mysql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:36.