Recuperar conexión ADO mysql

Post Reply
User avatar
leandro
Posts: 1688
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
Contact:

Recuperar conexión ADO mysql

Post by leandro »

Hola buenas tardes para todos,

De nuevo nosotros aquí molestando, es que en algunas ocasiones, generalmente con conexiones remotas vía internet, el controlador de errores de fw nos devuelve el siguiente error:
Image

Después de mostrar ese error la aplicación se revienta, queremos saber si es posible recuperar la conexión y evitar la molestia al usuario de tener que salir de la aplicación y volver a ingresar para recuperar la conexión.
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
Antonio Linares
Site Admin
Posts: 42259
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Recuperar conexión ADO mysql

Post by Antonio Linares »

El mensaje de error en la imagen indica que la conexión al servidor MySQL se ha perdido. El error específico es "MySQL server has gone away", que corresponde al código de error nativo 2006. Este problema puede ser causado por varios factores, entre ellos:

Tiempo de espera del servidor: El servidor MySQL podría haber cerrado la conexión debido a inactividad o tiempo de espera. Esto se puede configurar en la configuración del servidor MySQL.
Consulta grande: Una consulta podría ser demasiado grande y el servidor no puede procesarla dentro del tamaño de paquete permitido. Esto se puede ajustar cambiando la configuración max_allowed_packet en MySQL.
Problemas de red: Problemas intermitentes de red podrían causar la caída de la conexión.
Sobrecarga del servidor: El servidor podría estar bajo una carga pesada y no puede manejar la solicitud.
Soluciones
Aumentar los tiempos de espera:

Ajusta las configuraciones wait_timeout e interactive_timeout en la configuración del servidor MySQL (my.cnf o my.ini).
sql
Copiar código
SET GLOBAL wait_timeout = 28800;
SET GLOBAL interactive_timeout = 28800;
Aumentar max_allowed_packet:

Modifica la configuración max_allowed_packet a un valor más alto en la configuración del servidor MySQL.
sql
Copiar código
SET GLOBAL max_allowed_packet = 64 * 1024 * 1024;
Optimizar las consultas:

Divide las consultas grandes en partes más pequeñas si es posible.
Verificar la estabilidad de la red:

Asegúrate de que la conexión de red entre el cliente y el servidor sea estable.
Monitorear la carga del servidor:

Utiliza herramientas de monitoreo para verificar la carga en el servidor MySQL y optimizar el rendimiento del servidor.
Pasos para aplicar _
Editar la configuración de MySQL:

Localiza el archivo de configuración de MySQL (my.cnf o my.ini).

Añade o modifica las siguientes configuraciones:

ini
Copiar código
[mysqld]
wait_timeout = 28800
interactive_timeout = 28800
max_allowed_packet = 64M
Reiniciar el servidor MySQL:

Después de hacer _ en el archivo de configuración, reinicia el servidor MySQL para aplicar _.
sh
Copiar código
sudo service mysql restart
Si necesitas más ayuda o instrucciones específicas sobre cómo editar los archivos de configuración y reiniciar el servidor según tu sistema operativo, por favor, házmelo saber.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
sysctrl2
Posts: 1035
Joined: Mon Feb 05, 2007 7:15 pm
Contact:

Re: Recuperar conexión ADO mysql

Post by sysctrl2 »

Cual es la diferencia en usar ADO y no la conexión nativa de FWH ? :shock:

Code: Select all | Expand

      FWCONNECT oServer HOST cServer ;
                      USER cUser ;
                      PASSWORD cPassword ;
                      PORT nPort ;
                      FLAGS nFlags
                      && DATABASE cDBName

 
SALUDOS !
Cesar Cortes Cruz
SysCtrl Software
Mexico

' Sin +- FWH es mejor "
csincuir
Posts: 411
Joined: Sat Feb 03, 2007 6:36 am
Location: Guatemala
Contact:

Re: Recuperar conexión ADO mysql

Post by csincuir »

leandro wrote:Hola buenas tardes para todos,

De nuevo nosotros aquí molestando, es que en algunas ocasiones, generalmente con conexiones remotas vía internet, el controlador de errores de fw nos devuelve el siguiente error:
Image

Después de mostrar ese error la aplicación se revienta, queremos saber si es posible recuperar la conexión y evitar la molestia al usuario de tener que salir de la aplicación y volver a ingresar para recuperar la conexión.
Hola Leandro,
A mi me ha pasado lo mismo, utilizando Eagle1 para conectarme a MySQL, tengo configurado el mismo como indica Antonio, pero como tu dices, tengo clientes que se conectan a MySQL en un servidor VPS en la nube por medio de internet, y es cuando mas sucede este problema de "MySQL server has gone away"

Si te sirve de algo, he minimizado un poco el problema utilizando un timer al inicio de mi aplicación y ejecutar una función para hacer una llamada al MySQL con un query sencillo, para mantener la conexión con el mismo:

Code: Select all | Expand

...
 oTimerTime := TTimer():New( 2500, { || VER_MYSQL() } )
...
*************************
FUNCTION VER_MYSQL() 
*************************
Local aux, cSql, cCod, oSql, lnot

    TRY
        oSql := TsTable( "inventario" )
        cSql := "SELECT id_codigo FROM inventario LIMIT 1"
        oSql:Open( cSql )
    CATCH

    END 
Return .t.

 
Pero, algunas veces por conexiones de internet se pierde la señal con el servidor VPS, se produce el error, y no hay manera de volver a recuperar la conexión, mas que salir de la aplicación y volver a ingresar.

Espero te sirva algo lo anterior.

Saludos cordiales.

Carlos.
User avatar
leandro
Posts: 1688
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
Contact:

Re: Recuperar conexión ADO mysql

Post by leandro »

Carlos gracias por responder...

Si también tenemos esa misma opción que tu dices, con eso logramos mantener la conexión, el problema es cuando realmente la conexión se cae por completo, ya se por que se cayo el internet, el usuario desconecta el cable de red o la red inalámbrica.
sysctrl2 wrote:Cual es la diferencia en usar ADO y no la conexión nativa de FWH ?
Cesar no había pensando en esa opción, no se si funcione, ya que todas las conexiónes las hacemos con la función ADO de fw.

Code: Select all | Expand

oCnEmp := FW_OpenAdoConnection( cCnd )
 

Voy a intentarlo a ver si funciona.

Cualquier cosa vuelvo y comento.
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
JoséQuintas
Posts: 48
Joined: Tue Feb 09, 2021 4:20 pm

Re: Recuperar conexión ADO mysql

Post by JoséQuintas »

Sé que este tema es antigo, pero no vi ningún comentario sobre esto:

Noté en el mensaje de error que se está utilizando odbc 3.51

ODBC 3.51 es malo.
Ha passado mucho tiempo, no recuerdo cuál era el comando.
Mismo SELECT simple, odbc 3.51 causó desconexión, pero odbc 5.3 ningún problema.
Nunca volvi a usar odbc 3.51 después de eso.
Y en ConnectionString de 5.3 agrego esto: AUTO_RECONNECT=1;
Post Reply