2010-06-09 15 views
5

Tengo una tabla con ~ 800k filas. Ejecuté un update users set hash = SHA1(CONCAT({about eight fields})) where 1;Asesinato del proceso mysqld

Ahora tengo un proceso colgado de Sequel Pro y no estoy seguro sobre el proceso mysqld.

Ésta es dos preguntas:

  1. ¿Qué daño posiblemente hecho de matar a estos programas? Estoy trabajando en una base de datos separada, por lo que no debería haber daños en otras bases de datos en el sistema, ¿verdad?

  2. Supongamos que tiene que actualizar una tabla como esta. ¿Cuál sería un método más rápido/más confiable de actualizar sin escribir un script separado.

acabo de comprobar con phpMyAdmin y aparece como si la consulta es completa. Todavía tengo Sequel Pro utilizando el 100% de mis dos núcleos aunque ...

Respuesta

5

Si está utilizando InnoDB, que está respaldado por un registro de transacciones para fines de recuperación y retrotracción, puede salirse con la suya con facilidad, especialmente en un entorno que no es de producción.

La forma más fácil de poner fin a una consulta renegado es el uso de la cáscara de MySQL como usuario root:

SHOW PROCESSLIST; 

Esto le dará una lista de las conexiones actuales y un identificador de proceso para cada uno. Para finalizar una consulta determinada, como el número 19, use:

KILL 19; 

Normalmente, esto deshará y deshace la consulta. En algunos casos, esto no es suficiente y es posible que deba forzar el cierre del proceso del servidor MySQL con kill -9. En la mayoría de los casos, debería poder reiniciar el servidor de inmediato, y el DB estará en el último estado totalmente comprometido.

1

para obtener el ID de hilo (que te muestro la consulta al lado):

mysqladmin proc 

matar con seguridad el hilo consulta:

mysqladmin kill [id] 

Terminará con una tabla parcialmente actualizada a menos que use innodb, pero debería estar bien. Details:

Durante actualizar o borrar operaciones, el flag kill se comprueba después de cada bloque leer y después de cada actualizados o borrados fila. Si se establece el indicador de finalización, , la instrucción se anula. Tenga en cuenta que si no está utilizando transacciones, los cambios no se revierten.

En cuanto a su segunda pregunta, no hay mejor forma de actualizar una tabla si no se permite escribir una secuencia de comandos por separado (por ejemplo, acelerar las actualizaciones).

Cuestiones relacionadas