Pregunta

Estoy usando Pylons (un marco 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')

Comprobé un poco y vi que esto se debía a que las conexiones a MySQL no se renovaban.Sin embargo, esto no debería ser un problema, porque el sqlalchemy.pool_recycle en el archivo de configuración debería mantenerlo activo automáticamente.El valor predeterminado era 3600, pero lo volví a marcar 1800 debido a este problema.Me ayudó un poco, pero 3600 debería estar bien según los documentos.Los errores todavía ocurren con regularidad.No quiero bajarlo demasiado y DOS mi propia base de datos :).

¿Quizás algo en mi configuración de MySQL es ridículo?No estoy seguro de dónde buscar exactamente.

Otros detalles relevantes:

  Python 2.5
  Pylons: 0.9.6.2 (w/ sql_alchemy)
  MySQL: 5.0.51
¿Fue útil?

Solución

Creo que lo arreglé.Resulta que tuve un simple error de configuración.Mi archivo ini decía:

sqlalchemy.default.url = [connection string here]
sqlalchemy.pool_recycle = 1800

El problema es que mi environment.py El archivo declaró que el motor solo asignaría claves con el prefijo: sqlalchemy.default entonces pool_recycle fue ignorado.

La solución es simplemente cambiar la segunda línea del ini a:

sqlalchemy.default.pool_recycle = 1800

Otros consejos

Es posible que desees 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 cancela las conexiones después de 8 horas), pero tal vez el valor predeterminado para su plataforma sea diferente o quien administre el servidor haya configurado las cosas de manera diferente.

AFAICT, pool_recycle en realidad no mantiene vivas las conexiones, las caduca por sí sola antes de que MySQL las elimine.No estoy familiarizado con las torres de alta tensión, pero si hago que las conexiones hagan un SELECT 1; es una opción que los mantendrá vivos a costa de prácticamente ninguna carga del servidor y un tráfico de red mínimo.Un último pensamiento:¿Estás logrando de alguna manera utilizar una conexión que los pilones creen que ha caducado?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top