¿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 PROCESSLIST
mostró 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 mysql
con 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 ALTER
estaba ejecutando. Simplemente elimínelo.
Por razones de seguridad ALTER
, al menos en 5,5 días, funcionó así:
- Cree una tabla nueva y vacía como la tabla existente.
- Cambie el esquema (agregue una columna, en su caso)
- Copie todos los datos de la tabla existente a la nueva. (La parte lenta)
- Haga algunos cambios de nombre de tablas.
- 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ó.