¿Cómo puedo cambiar el tiempo de espera de conexión MySQL predeterminado al conectarse a través de Python?

StackOverflow https://stackoverflow.com/questions/14726789

  •  07-03-2022
  •  | 
  •  

Pregunta

Me conecté a una base de datos MySQL utilizando Python con = _mysql.connect('localhost', 'dell-pc', '', 'test')El programa que escribí tarda mucho tiempo en su total ejecución, es decir, alrededor de 10 horas. En realidad, estoy tratando de leer palabras distintas de un corpus. Después de que la lectura se terminó, 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?

¿Fue útil?

Solución

Hacer:

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

Significado del parámetro (tomado de MySQL Workbench in Navigator: instancia> Archivo de opciones> Tab "Networking"> Sección "Configuración de tiempo de espera")

  • Connect_timeOut: Número de segundos El servidor MYSQLD espera a un paquete de conexión antes de responder con 'Handshake malo'
  • interactive_timeout Número de segundos El servidor espera la actividad en una conexión interactiva antes de cerrarla
  • wait_timeout Número de segundos El servidor espera la actividad en una conexión antes de cerrarla

BTW: 28800 segundos son 8 horas, por lo que durante un tiempo de ejecución de 10 horas, estos valores deben ser realmente más altos.

Otros consejos

Cambia el valor predeterminado en el archivo de configuración de MySQL (opción Connect_timeOut en mysqld sección) -

[mysqld]
connect_timeout=100

Si este archivo no es accesible para usted, puede configurar este valor usando esta declaración -

SET GLOBAL connect_timeout=100;

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

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

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

Para detalles sobre diferentes argumentos que puedes pasar a _mysql.connect, ver Documentación API MySQLDB

Max_execution_time es también un parámetro importante para las consultas de larga duración. Trabajar para MySQL 5.7 o posterior.

Compruebe el valor actual

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

Luego lo configura de acuerdo a sus necesidades.

SET SESSION MAX_EXECUTION_TIME=2000;
SET GLOBAL MAX_EXECUTION_TIME=2000;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top