tutorial - python mysqldb query
Error de Pilones-''El servidor MySQL se ha ido'' (2)
Creo que lo arreglé Resultó que tenía un error de configuración simple. Mi archivo ini decía:
sqlalchemy.default.url = [connection string here]
sqlalchemy.pool_recycle = 1800
El problema es que mi archivo environment.py
declaró que el motor solo pool_recycle
claves con el prefijo: sqlalchemy.default
por pool_recycle
se ignoró pool_recycle
.
La solución es simplemente cambiar la segunda línea en el ini para:
sqlalchemy.default.pool_recycle = 1800
[Espero que esto no sea demasiado oscuro ... Preguntaré al grupo de noticias si nadie sabe aquí]
Estoy usando Pylons (un framework de Python) para servir una aplicación web simple, pero parece morir de vez en cuando, con esto en el registro de errores: (2006, ''MySQL server has gone away'')
Hice un poco de comprobación y vi que esto se debía a que las conexiones con MySQL no se renovaban. Esto no debería ser un problema, porque sqlalchemy.pool_recycle
en el archivo de configuración debería mantenerlo activo automáticamente. El valor predeterminado era 3600
, pero lo marqué nuevamente a 1800
debido a este problema. Ayudó un poco, pero 3600
debería estar bien según los documentos. Los errores todavía ocurren semi-regularmente. Aunque no quiero bajar demasiado y tengo mi propia base de datos :).
Tal vez algo en mi configuración de MySQL es tonto? No estoy seguro de dónde mirar exactamente.
Otros detalles relevantes:
Python 2.5
Pylons: 0.9.6.2 (w/ sql_alchemy)
MySQL: 5.0.51
Es posible que desee comprobar las variables de tiempo de espera de MySQL:
show variables like ''%timeout%'';
Probablemente estés interesado en wait_timeout
(menos probable pero posible: interactive_timeout
). En Debian y Ubuntu, los valores predeterminados son 28800 (MySQL elimina las conexiones después de 8 horas), pero tal vez el valor predeterminado para su plataforma es diferente o quien administra el servidor ha configurado las cosas de manera diferente.
AFAICT, pool_recycle
realidad no mantiene las conexiones activas, expira por sí misma antes de que MySQL las mate. No estoy familiarizado con las torres de alta tensión, pero si las conexiones se hacen intermitentemente, haga una SELECT 1;
es una opción que los mantendrá con vida a costa de, básicamente, no tener carga del servidor y un tráfico de red mínimo. Una última reflexión: ¿de alguna manera logras usar una conexión que los pilones piensan que ha expirado?