Estoy buscando un script bash bien probado (o una solución alternativa) para hacerlo, a fin de evitar que se agote max_connection. Sé que está luchando contra los síntomas, pero realmente necesito ese script como una solución a corto plazo.
linux
mysql
query
kill-process
Alfish
fuente
fuente
Respuestas:
echa un vistazo al comando pt-kill del kit de herramientas de percona .
y ... comience a monitorear su sistema: munin , cactus con mejores plantillas de cactus para mysql , cualquier cosa para que tenga una idea de lo que está sucediendo. el registro de consultas lentas de mysql también será una buena idea.
fuente
Si tiene MySQL 5.1 donde la lista de procesos está en INFORMATION_SCHEMA, puede hacer esto para generar los comandos KILL QUERY en masa desde el cliente mysql para consultas que se ejecutan más de 20 minutos (1200 segundos):
Puede hacer cláusulas WHERE en el campo INFO para buscar una consulta específica, el campo TIME en consultas de ejecución prolongada o el campo DB en una base de datos específica.
Si es root @ localhost, debe tener todos los privilegios para ejecutar esto de la siguiente manera
Puede crontab esto de la siguiente manera:
Aquí hay otra variación:
Por cierto, no tiene que especificar un myDB ya que leí explícitamente information_schema.processlist como un nombre de tabla completamente calificado.
Aquí hay una demostración de lo que debería ver. Para este ejemplo, haré eco del comando KILL de todos los procesos cuyo tiempo> 20000 segundos:
He estado haciendo esta técnica durante los últimos 5 años. De hecho, envié esta respuesta al DBA StackExchange el año pasado y fue aceptada .
fuente
Encontré el siguiente código recortado aquí :
Actualización 2013-01-14: Hubo una sugerencia anónima de que esto es potencialmente peligroso y también puede matar los procesos de replicación. Así que use bajo su propio riesgo:
fuente
MySQL 5.7 en adelante puede usar la variable max_execution_time para hacer esto automáticamente para todas las consultas de lectura "SELECCIONAR".
fuente
¡No probaría las soluciones bash si te gusta el tiempo de actividad!
Si tiene acceso al código, puede establecer el tiempo de ejecución máximo en las instrucciones SELECT utilizando el método descrito aquí :
De lo contrario, en el servidor:
/programming/415905/how-to-set-a-maximum-execution-time-for-a-mysql-query
Instalar pt-kill:
Tome una instantánea de su lista de procesos:
Prueba pt-kill en la instantánea:
Asegúrese de que las reglas del partido se adapten a su caso. Estos anteriores matarán todas las declaraciones de ejecución durante 45 segundos. Una vez que esté seguro, modifique y ejecute este comando para ejecutar la declaración en un intervalo de 10 segundos:
fuente