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:
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.
Recuperar conexión ADO mysql
Recuperar conexión ADO mysql
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) ]
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) ]
- Antonio Linares
- Site Admin
- Posts: 42259
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Recuperar conexión ADO mysql
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.
Re: Recuperar conexión ADO mysql
Cual es la diferencia en usar ADO y no la conexión nativa de FWH ?
SALUDOS !
Code: Select all | Expand
FWCONNECT oServer HOST cServer ;
USER cUser ;
PASSWORD cPassword ;
PORT nPort ;
FLAGS nFlags
&& DATABASE cDBName
Cesar Cortes Cruz
SysCtrl Software
Mexico
' Sin +- FWH es mejor "
SysCtrl Software
Mexico
' Sin +- FWH es mejor "
Re: Recuperar conexión ADO mysql
Hola Leandro,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:
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.
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.
Espero te sirva algo lo anterior.
Saludos cordiales.
Carlos.
Re: Recuperar conexión ADO mysql
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.
Voy a intentarlo a ver si funciona.
Cualquier cosa vuelvo y comento.
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.
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.sysctrl2 wrote:Cual es la diferencia en usar ADO y no la conexión nativa de FWH ?
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) ]
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) ]
-
- Posts: 48
- Joined: Tue Feb 09, 2021 4:20 pm
Re: Recuperar conexión ADO mysql
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;
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;