Desarrollo y bases de datos
Cerrar consultas MySQL en ejecución
Una consulta lenta o bloqueada puede retrasar otras peticiones de la aplicación. Antes de interrumpirla, identifica su usuario, base de datos, estado y contenido: que lleve mucho tiempo no significa por sí solo que deba cerrarse.
Guarda el diagnóstico sin publicar datos personales que aparezcan en el SQL. Si se trata de una importación, copia o cambio de esquema previsto, comprueba primero quién lo inició.
Vía SSH o terminal integrada en cPanel
Como primer paso deberás conectar vía SSH a la cuenta, si tienes experiencia la conexión por medio de la terminal instalada en tu equipo sería la solución ideal, en caso contrario la terminal integrada en cPanel sería una opción mucho más sencilla.
Por medio de consultas SQL desde el servidor MySQL
Una vez dentro de la terminal, nos conectamos con MySQL por medio del comando:
mysql -u usuario_mysql -p
Donde usuario_mysql es un usuario MySQL con permisos sobre la base de datos. El cliente solicitará la contraseña sin dejarla escrita en el historial ni visible en la lista de procesos.
Y ejecutamos la consulta que nos permite ver los procesos abiertos.
SHOW FULL PROCESSLIST;
Por medio de esta obtendremos una tabla con las consultas en ejecución y el tiempo que lleva en su estado actual. Una conexión Sleep está inactiva, pero puede mantener una transacción abierta; no la cierres únicamente por su duración.
Tomamos el valor del campo ID de la que queremos cerrar y ejecutamos:
KILL QUERY IDENTIFICADOR;
KILL QUERY detiene la consulta actual sin cerrar toda la conexión. Tras ejecutarlo, comprueba de nuevo el listado y el estado de la aplicación. No necesariamente libera todos los bloqueos de una transacción que permanece abierta, y la interrupción puede tardar en completarse. No repitas órdenes sobre una lista antigua: vuelve a comprobar el identificador.
Si necesitas preparar varias órdenes, la siguiente consulta genera una sentencia por proceso del usuario indicado. No las ejecuta: revisa cada identificador, descarta tu propia sesión y cualquier consulta legítima de producción, y ejecuta después únicamente las sentencias necesarias.
SELECT CONCAT('KILL QUERY ', ID, ';') AS sentencia_a_revisar FROM information_schema.PROCESSLIST WHERE USER = 'USUARIO_MYSQL' AND COMMAND <> 'Sleep' AND ID <> CONNECTION_ID();
En un hosting gestionado solo podrás ver y detener los procesos permitidos por los privilegios de tu usuario. No elimines el filtro para intentar cerrar todo lo visible: también puedes interrumpir peticiones activas de tu propia web.
Usando la herramienta mysqladmin
Desde la terminal también disponemos de mysqladmin para listar procesos. Su orden kill no equivale a KILL QUERY: termina la conexión completa y puede interrumpir una transacción o una sesión de la aplicación.
mysqladmin -u USUARIO_MYSQL -p processlist
Usa el identificador con mysqladmin kill únicamente si has comprobado que puedes cerrar toda esa conexión:
mysqladmin -u USUARIO_MYSQL -p kill ID
Puedes indicar varios identificadores separados por comas, pero cada uno cerrará su conexión completa:
mysqladmin -u USUARIO_MYSQL -p kill 12,34,56
Para detener solo la sentencia activa, utiliza KILL QUERY desde MySQL. No encadenes processlist con awk, grep y xargs para cerrar procesos automáticamente: la salida contiene cabeceras y bordes, y una coincidencia imprecisa puede interrumpir consultas legítimas.
Desde phpMyAdmin
La interfaz permite consultar los procesos sin abrir una terminal. La acción de terminar un proceso puede cerrar su conexión completa; para detener solo la sentencia utiliza la pestaña SQL con KILL QUERY si tu usuario tiene permiso.
Accede a phpMyAdmin, abre Estado y entra en Procesos. Esa vista muestra los procesos permitidos para tu usuario y, cuando tienes permisos, la acción para terminar cada uno. Revisa el identificador, el tiempo y la consulta antes de usarla.
Si el problema se repite
Revisa la consulta, sus índices, las transacciones abiertas y la tarea que la lanza. Cerrar procesos alivia algunos bloqueos, pero no corrige su causa. Si necesitas soporte, indica hora, base de datos, estado e identificador y facilita el SQL por un canal privado cuando sea necesario.
Consulta el alcance de KILL y KILL QUERY en MySQL.
También te puede ayudar
- Conexión remota y segura al servidor MySQL Protege una conexión MySQL remota mediante un túnel SSH y configura por separado las credenciales SS...
- Consultar la versión de MySQL y comprobar compatibilidad Identifica la versión real del servidor MySQL que utiliza tu aplicación, revisa compatibilidad y dis...
- Convertir base de datos MyISAM a InnoDB, cambiando el motor de almacenamiento Convierte tablas MyISAM a InnoDB sobre un clon verificado, revisa espacio, índices y filas, y conser...
- Convertir base de datos utf8 a utf8mb4 Migra tablas de utf8 a utf8mb4 en una base clonada, revisando collations e índices y conservando un...
¿Algo no cuadra o ha cambiado? Cuéntanoslo y lo revisamos.