Foros del Web » Programando para Internet » PHP »

Como actuar cuando se pierde la conexion mysql

Estas en el tema de Como actuar cuando se pierde la conexion mysql en el foro de PHP en Foros del Web. Hola a todos. En dias pasados el servidor web de una página que administro me mostro el siguiente error. Lost connection to MySQL server at ...
  #1 (permalink)  
Antiguo 20/03/2012, 07:52
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 12 años, 9 meses
Puntos: 181
Como actuar cuando se pierde la conexion mysql

Hola a todos.

En dias pasados el servidor web de una página que administro me mostro el siguiente error.

Lost connection to MySQL server at 'reading initial communication packet', system error: 111

Supongo que estarian realizando un mantenimiento preventivo y se perdio la conexión con las bases de datos por eso si bien la pagina como tal si se estaba descargando los datos dinámicos no se podian ver y se mostraban los warnings y los errores correspondientes, motivo por el cual me toco montar rapidamente una pagina de error temporal.

Mi idea es que en un futuro si volviera a ocurrir eso en lugar de que aparecieran las advertencias pudiera o bien colocar imagenes diciendo que el servicio esta temporalmente fuera de servicio o me redireccionara a una pagina donde mostrara que momentaneamente el servicio no esta disponible sin tener que hacerlo yo manualmente. Como es la primera vez que me ocurre no se exactamente que es lo que me tocaria hacer. Si alguien me brindara una pagina o pistas de como resolver este problema se lo agradeceria mucho.

De antemano agradezco la colaboración prestada.
  #2 (permalink)  
Antiguo 20/03/2012, 08:02
Avatar de informacionsys  
Fecha de Ingreso: mayo-2011
Ubicación: Bogota D.C
Mensajes: 793
Antigüedad: 12 años, 11 meses
Puntos: 76
Respuesta: Como actuar cuando se pierde la conexion mysql

podrias por ejemplo en tu conexion

Código PHP:
Ver original
  1. @$conex = mysql_connect("localhost","xx","xx"); // el @ es para escapar los mensajes de error
  2.  if(!$conex){//validamos que la conexion haya fallado
  3.    //   header('Location:mantenimiento.php');
  4.    // echo "Fallo la conexion a la base de datos";
  5.    exit;
  6. }

....
  #3 (permalink)  
Antiguo 20/03/2012, 08:16
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
Respuesta: Como actuar cuando se pierde la conexion mysql

Si toda tu pagina depende de la base de datos.
1) Te recomiendo que quites todos los mysql_query()or die(mysql_error());
(ya que el die(mysql_error()) se utiliza para debug no en produccion, ya que no podes controlar lo que este va a decir y podes estar diciendo nombres de tablas y columnas ERROR DE SEGURIDAD).

2) Si usas $_SESSION seguro tenes un archivo en al cabezera que verifica la session,
Por que no le agregas a esta cabezera la verificacion de Base de datos como antes mensionaron.

---->Si no tienes una cabezera para las $_SESSION implementa una para DB

Salutes!
__________________
Mono programando!
twitter.com/eguimariano
  #4 (permalink)  
Antiguo 20/03/2012, 10:01
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 12 años, 9 meses
Puntos: 181
Respuesta: Como actuar cuando se pierde la conexion mysql

Muchas gracias informacionsys y SirDuque por sus respuestas. Ahora con la respuesta de SirDuque me ha quedado una duda adicional para ver si me puedes colaborar. Yo he tenido paginas donde uno inicializa la página usando un usuario y contraseña. En caso de que este usuario este registrado en una base de datos y despues de filtrar datos para evitar posibles usos de sql injection y demas se redirige a las paginas de interes. En caso de que la variable $_SESSION no este inicializada pues no se puede ingresar a esta página. Digamos que hasta ahí estoy claro.

Cita:
---->Si no tienes una cabezera para las $_SESSION implementa una para DB
En este caso en concreto como el usuario final no debe ingresar ninguna clave ni nada por el estilo, no tengo muy claro que deberia hacer para inicializar las sesiones usando la base de datos. No se si mi duda esta clara. ¿Tendria que crear algun campo dentro de la base de datos para que la fuera a verificar o algo asi y así iniciar sesión? Es claro que en este caso pues no deberia ingresar ninguna clave por teclado.

Agradezco una vez mas la colaboración.
  #5 (permalink)  
Antiguo 20/03/2012, 10:19
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
Respuesta: Como actuar cuando se pierde la conexion mysql

No...
La idea es esta:

Supongamos que tenes un pagina de Noticias, estas noticias se alojan en una Base de Datos.

Si el visitante (cualquiera que ande navegando por la web, sin necesidad de logearse). Intenta ingresar a la parte de noticias, y esta no anda no vea errorer y sea redirigido a una pagina de mantenimiento.

¿como enviar a una pagina de mantenimiento si no podemos conectarnos a la base de datos?

Colocamos al principio del archivo .PHP :


Cita:
Código PHP:
Ver original
  1. @$conex = mysql_connect("localhost","xx","xx"); // el @ es para escapar los mensajes de error
  2.  if(!$conex){//validamos que la conexion haya fallado
  3.    header('Location:mantenimiento.php');
  4.    exit;
  5. }
__________________
Mono programando!
twitter.com/eguimariano
  #6 (permalink)  
Antiguo 20/03/2012, 10:44
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 12 años, 9 meses
Puntos: 181
Respuesta: Como actuar cuando se pierde la conexion mysql

Ok, creo que me había confundido con lo de $_SESSION. Ya me quedo claro, voy a implementarlo y si llegara a tener alguna duda adicional les comentare, aunque creo que no tendre problemas.

Gracias a ambos por su colaboración y tiempo.

p.s. Creo que existe un error en la arroba para comentar la función.

Código PHP:
@$conex mysql_connect("localhost","xx","xx"); 
Deberia ir asi
Código PHP:
$conex = @mysql_connect("localhost","xx","xx"); 
Gracias de nuevo.

Última edición por cuasatar; 20/03/2012 a las 15:59
  #7 (permalink)  
Antiguo 20/03/2012, 16:40
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
Respuesta: Como actuar cuando se pierde la conexion mysql

Cita:
Iniciado por cuasatar Ver Mensaje
Ok, creo que me había confundido con lo de $_SESSION. Ya me quedo claro, voy a implementarlo y si llegara a tener alguna duda adicional les comentare, aunque creo que no tendre problemas.

Gracias a ambos por su colaboración y tiempo.

p.s. Creo que existe un error en la arroba para comentar la función.

Código PHP:
@$conex mysql_connect("localhost","xx","xx"); 
Deberia ir asi
Código PHP:
$conex = @mysql_connect("localhost","xx","xx"); 
Gracias de nuevo.
El "@" es para evitar salidas de errores, es mejor que lo dejes, ya que no es bueno mostrar los errores a los visitantes.
__________________
Mono programando!
twitter.com/eguimariano
  #8 (permalink)  
Antiguo 20/03/2012, 19:33
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 12 años, 9 meses
Puntos: 181
Respuesta: Como actuar cuando se pierde la conexion mysql

No le estoy quitando la arroba, si observas simplemente la coloco antes de el llamado a la función mysql_connect. Nunca he visto que a una variable se le coloque la arroba antes. Si te das cuenta en la parte del codigo original se le coloco arroba antes de la variable $conex.

http://php.net/manual/es/language.operators.errorcontrol.php

De todas maneras y para salir dudas me gustaria saber si alguien sabe si ambas maneras son correctas o no. Por lo que leo del manual parece que si pero no estoy seguro. Esto es lo que sale en el manual:


Nota: El operador @ trabaja sólo sobre expresiones. Una simple regla de oro es: si se puede tomar el valor de algo, entonces se le puede anteponer el operador @. Por ejemplo, puede anteponerse a variables, a llamadas a funciones e include()s, constantes y así sucesivamente. No puede anteponerse a definiciones de función o clase, ni a estructuras condicionales como if y foreach, y así sucesivamente.


Igual ya implemente la solución y me funciono muy bien.

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 04:00.