¿Cómo puedo cambiar el tiempo de espera predeterminado de la conexión Mysql cuando me conecto a través de python?

Me conecté a una base de datos mysql usando python con = _mysql.connect('localhost', 'dell-pc', '', 'test') El progtwig que escribí toma mucho tiempo en ejecución completa, es decir, alrededor de 10 horas. En realidad, estoy tratando de leer palabras distintas de un corpus. Después de terminar la lectura hubo un error de tiempo de espera.

Revisé los tiempos de espera predeterminados de Mysql que fueron:

 +----------------------------+----------+ | Variable_name | Value | +----------------------------+----------+ | connect_timeout | 10 | | delayed_insert_timeout | 300 | | innodb_lock_wait_timeout | 50 | | innodb_rollback_on_timeout | OFF | | interactive_timeout | 28800 | | lock_wait_timeout | 31536000 | | net_read_timeout | 30 | | net_write_timeout | 60 | | slave_net_timeout | 3600 | | wait_timeout | 28800 | +----------------------------+----------+ 

¿Cómo puedo cambiar el tiempo de espera predeterminado?

Hacer:

 con.query('SET GLOBAL connect_timeout=28800') con.query('SET GLOBAL wait_timeout=28800') con.query('SET GLOBAL interactive_timeout=28800') 

Significado de los parámetros (tomado de MySQL Workbench en Navigator: Instancia> Archivo de opciones> Pestaña “Redes”> Sección “Configuración de tiempo de espera”)

  • connect_timeout : el número de segundos que el servidor mysqld espera un paquete de conexión antes de responder con un “rechazo de mano incorrecto”
  • interactive_timeout La cantidad de segundos que el servidor espera a la actividad en una conexión interactiva antes de cerrarla
  • wait_timeout Número de segundos que el servidor espera a que se active la actividad en una conexión antes de cerrarla

Por cierto: 28800 segundos son 8 horas, por lo que para un tiempo de ejecución de 10 horas estos valores deberían ser realmente más altos.

Cambia el valor predeterminado en el archivo de configuración de MySQL (opción connect_timeout en la sección mysqld ) –

 [mysqld] connect_timeout=100 

Si no puede acceder a este archivo, entonces puede establecer este valor usando esta statement:

 SET GLOBAL connect_timeout=100; 

Sé que esta es una pregunta antigua, pero solo para el registro, esto también se puede hacer pasando las opciones de conexión apropiadas como argumentos a la llamada _mysql.connect . Por ejemplo,

 con = _mysql.connect(host='localhost', user='dell-pc', passwd='', db='test', connect_timeout=1000) 

Observe el uso de los parámetros de palabras clave (host, passwd, etc.). Mejoran la legibilidad de tu código.

Para obtener detalles sobre los diferentes argumentos que puede pasar a _mysql.connect , consulte la documentación de la API MySQLdb

MAX_EXECUTION_TIME también es un parámetro importante para consultas de larga ejecución. Funcionará para MySQL 5.7 o posterior.

Compruebe el valor actual

 SELECT @@GLOBAL.MAX_EXECUTION_TIME, @@SESSION.MAX_EXECUTION_TIME; 

Luego configúralo de acuerdo a tus necesidades.

 SET SESSION MAX_EXECUTION_TIME=2000; SET GLOBAL MAX_EXECUTION_TIME=2000;