Recuperar conexión ADO mysql

Recuperar conexión ADO mysql

Postby leandro » Wed Jun 12, 2024 10:12 pm

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
leandro
 
Posts: 1688
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

Re: Recuperar conexión ADO mysql

Postby Antonio Linares » Thu Jun 13, 2024 5:33 am

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 los cambios
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 los cambios en el archivo de configuración, reinicia el servidor MySQL para aplicar los cambios.
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
Antonio Linares
Site Admin
 
Posts: 42203
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Recuperar conexión ADO mysql

Postby sysctrl2 » Thu Jun 13, 2024 7:12 pm

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

Code: Select all  Expand view  RUN

      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 "
User avatar
sysctrl2
 
Posts: 1032
Joined: Mon Feb 05, 2007 7:15 pm

Re: Recuperar conexión ADO mysql

Postby csincuir » Fri Jun 14, 2024 11:58 am

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 view  RUN

...
 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.
csincuir
 
Posts: 411
Joined: Sat Feb 03, 2007 6:36 am
Location: Guatemala

Re: Recuperar conexión ADO mysql

Postby leandro » Fri Jun 14, 2024 2:42 pm

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 view  RUN

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) ]
User avatar
leandro
 
Posts: 1688
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

Re: Recuperar conexión ADO mysql

Postby JoséQuintas » Sat Oct 26, 2024 4:29 pm

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;
JoséQuintas
 
Posts: 44
Joined: Tue Feb 09, 2021 4:20 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 111 guests