systemadmin.es > DBA > Matar sesiones en MySQL

Matar sesiones en MySQL

Mediante el comando KILL podemos matar les sesiones que se nos han quedado colgadas en un servidor de bases de datos MySQL.

Vamos a ver las opciones que tenemos para matar un conjunto grande de sesiones.

Para matar un conjunto determinado de sesiones cada administrador tiene sus maneras. Podemos hacerlo tanto desde el propio MySQL como desde la consola del sistema.

Por ejemplo, si queremos matar todas las sesiones que hay acumuladas lo haríamos:

# for i in $(echo "show processlist;" | mysql -u root -pejemplo | grep -v "^Id" | awk '{ print $1 }'); do echo "kill $i;" | mysql -u root -pejemplo; done

O bien desde el propio MySQL usando un fichero temporal mediante INTO OUTFILE:

mysql> SELECT concat('KILL ',id,';') FROM information_schema.processlist INTO OUTFILE '/tmp/kill.1';

A continuación lo cargamos también desde el MySQL con SOURCE:

mysql> source /tmp/kill.1;

Este es el método que podemos ver en MySQL Performance blog.

Con los dos métodos podemos filtrar por usuario o por cualquier otro dato. Vamos a ver por hacerlo por usuario:

  • En el caso de usar la linea de comandos:

    # for i in $(echo "show processlist;" | mysql -u root -pejemplo | awk ' $2 ~ /motos/ { print $1  }'); do echo "kill $i;" | mysql -u root -pejemplo; done
    
  • En el caso de usar el propio MySQL haríamos lo siguiente:
    mysql> SELECT concat('KILL ',id,';') FROM information_schema.processlist WHERE user='motos' INTO OUTFILE '/tmp/kill.2';
    

Personalmente prefiero usar la linea de comandos por no usar ficheros temporales, aúnque se debe reconocer que resulta más simple usando el fichero temporal y el comando SOURCE de MySQL.

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>