Saltar al contenido

¿Por qué DROP DATABASE tarda tanto? (MySQL)

Si encuentras alguna parte que te causa duda puedes dejarlo en los comentarios y haremos todo lo necesario de ayudarte rápidamente.

Solución:

En lugar de eliminar el proceso, sería más seguro si lo hiciera dentro de MySQL:

$ mysqladmin processlist -u root -p
Enter password: 
+-----+------+-----------+-------------------+---------+------+-------+------------------+
| Id  | User | Host      | db                | Command | Time | State | Info             |
+-----+------+-----------+-------------------+---------+------+-------+------------------+
| 174 | root | localhost | example           | Sleep   | 297  |       |                  |
| 407 | root | localhost |                   | Query   | 0    |       | show processlist |
+-----+------+-----------+-------------------+---------+------+-------+------------------+

La consulta con id 174 es la que bloquea la eliminación de la base de datos ‘ejemplo’, por lo que antes de eliminar cualquier proceso, permita que MySQL intente finalizar la consulta:

$ mysqladmin kill 174

ejecutar el processlist Comando arriba de nuevo para confirmar que fue asesinado.

Si esto no funciona, tal vez podría considerar eliminar el proceso erróneo, pero antes de eso, podría intentar reiniciar el servidor MySQL.

También puede ejecutar comandos como ‘SHOW FULL PROCESSLIST’ y ‘KILL 174’ en el shell de MySQL, por ejemplo, si solo tiene instalado el cliente MySQL. El punto principal es evitar matar el proceso usando ‘matar’ en el shell a menos que sea absolutamente necesario.

En términos generales, puede usar cualquiera mysql o mysqladmin. Sin embargo, no debería necesitar ejecutar comandos como este con tanta frecuencia; una vez que comience a eliminar consultas con regularidad, algo definitivamente está mal y será mejor que solucione ese problema (eliminar el proceso de consulta es solo tratar el síntoma).

Aunque pensé que el proceso de importación había muerto, probablemente aún se estaba ejecutando.

los DROP DATABASE El comando probablemente esperó a que la base de datos terminara de importarse antes de ejecutarse.

Entonces, en lugar de DROP DATABASE tomando mucho tiempo, probablemente fue solo la importación.

1.)

Si alguien más lee esto y está tratando de cancelar la importación de una base de datos y descartar la base de datos, le recomiendo que primero busque el PID (ID de proceso) para la importación y ejecute esto desde una terminal diferente:

$ kill [PID]

…dónde [PID] sería el PID real para el proceso.

Debería ver que la importación se detiene inmediatamente si el otro terminal todavía está conectado.

2.)

También podrías correr SHOW PROCESSLIST en la pestaña SQL de phpMyAdmin. La tabla resultante muestra los procesos en ejecución, y hacer clic en la ‘x’ al lado de la fila que desea eliminar debería funcionar. Este sería el mismo efecto que la respuesta aceptada o matar al mysql proceso desde el mysql línea de comando.

Entonces corre

DROP DATABASE `database_name`;

Y todo debe estar limpio.


Otra respuesta sugirió que matar el proceso dentro de mysql es mejor que hacerlo desde afuera. No he probado esa respuesta, pero suena muy plausible. Así que la he marcado como la “respuesta aceptada” en lugar de esta.

Me enfrenté al mismo problema . Pero esta vez revisé mostrar lista de procesos; decía comprobar los permisos durante más tiempo. Luego descubrí que mysqld_safe se estaba ejecutando como raíz, mientras que los permisos de nivel de carpeta eran solo para el usuario de mysql. Por lo tanto, eliminé la consulta, por supuesto, me tomó mucho tiempo decir que estaba en estado eliminado, pero esperé a que reaccionara, luego eliminó la consulta y cambié los permisos de nivel de carpeta a root también al agregarlo al grupo y chmod a 770. Luego ejecuté la misma base de datos drop blah; funcionó para mí en 2 segundos para una base de datos de 20 GB.

Al final de todo puedes encontrar las explicaciones de otros programadores, tú también tienes la opción de insertar el tuyo si te gusta.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *