Disco lleno de tabla temporal de copia MySQL, ¿cómo elimino archivos temporales?

Disco lleno de tabla temporal de copia MySQL, ¿cómo elimino archivos temporales?

¿Cuál es la forma más segura de limpiar?

Servidor MySQL 5.5.62-0 en Debian 8 sin replicación.

Cometí un error y creé una nueva columna en una tabla de 26 GB. SHOW PROCESSLISTmostró que MySQL estaba copiando los datos a una tabla tmp al 100% de CPU.

+-----------+------+-----------+--------+---------+------+-------------------+------------------+
| Id        | User | Host      | db     | Command | Time | State             | Info             |
+-----------+------+-----------+--------+---------+------+-------------------+------------------+
| 145904211 | root | localhost | huge   | Query   |  160 | copy to tmp table | ALTER TABLE ...  |
| 145905739 | root | localhost | NULL   | Query   |    0 | NULL              | show processlist |
+-----------+------+-----------+--------+---------+------+-------------------+------------------+

Unos minutos más tarde, la partición principal estaba llena y la CPU cayó a 0. Lo usé systemctl stop mysqlcon la esperanza de que limpiara los archivos temporales. El servicio tampoco se reiniciaría.

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        79G   75G 1000K 100% /

$ sudo systemctl start mysql
Job for mysql.service failed. See 'systemctl status mysql.service' and 'journalctl -xn' for details.

Apagué el VPS y amplié el disco. El servidor se reinició bien y pude iniciar el proceso MySQL y conectarme a él. Todo parece estar funcionando.

Sin embargo, el uso del disco no se ha reducido desde el incidente de hace 20 minutos.

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       158G   75G   75G  50% /

¿Se activará la limpieza o debo limpiar manualmente el desorden que hice? ¿Cuál es la forma más segura de hacer eso?

Respuesta1

Primero, desde la herramienta de línea de comandos mysql:

kill 145904211;

Esodeberíalimpiar las cosas. De lo contrario, busque archivos que comiencen con algo como #sql.... Uno de ellos será enorme con una marca de tiempo de cuándo se ALTERestaba ejecutando. Simplemente elimínelo.

Por razones de seguridad ALTER, al menos en 5,5 días, funcionó así:

  1. Cree una tabla nueva y vacía como la tabla existente.
  2. Cambie el esquema (agregue una columna, en su caso)
  3. Copie todos los datos de la tabla existente a la nueva. (La parte lenta)
  4. Haga algunos cambios de nombre de tablas.
  5. Deja la vieja mesa.

Probablemente estés colgado en medio del paso 3.

El único momento riesgoso es el paso 4, que es muy rápido. Antes de eso, la vieja mesa todavía está viva y coleando. Después de eso, la nueva mesa la reemplazó.

información relacionada