Qual é a maneira mais segura de limpar?
Servidor MySQL 5.5.62-0 no Debian 8 sem replicação.
Cometi um erro e criei uma nova coluna em uma tabela de 26 GB. SHOW PROCESSLIST
mostrou que o MySQL estava copiando os dados para uma tabela tmp com 100% da 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 |
+-----------+------+-----------+--------+---------+------+-------------------+------------------+
Alguns minutos depois, a partição principal estava cheia e a CPU caiu para 0. Eu systemctl stop mysql
esperava que isso limpasse os arquivos temporários. O serviço também não seria reiniciado.
$ 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.
Desliguei o VPS e expandi o disco. O servidor reiniciou bem e consegui iniciar o processo MySQL e conectar-me a ele. Tudo parece estar funcionando.
No entanto, o uso do disco não diminuiu desde o incidente de 20 minutos atrás.
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 158G 75G 75G 50% /
A limpeza entrará em ação ou devo limpar manualmente a bagunça que fiz? Qual é a maneira mais segura de fazer isso?
Responder1
Primeiro, na ferramenta de linha de comando mysql:
kill 145904211;
Quedevelimpar as coisas. Caso contrário, procure por arquivos que comecem com algo como #sql...
. Um deles será enorme com um carimbo de data e hora de quando ALTER
estava em execução. Simplesmente exclua-o.
Por uma questão de segurança ALTER
, pelo menos em 5,5 dias, funcionou assim:
- Crie uma tabela nova e vazia como a tabela existente.
- Altere o esquema (adicione uma coluna, no seu caso)
- Copie todos os dados da tabela existente para a nova. (A parte lenta)
- Faça algumas renomeações de tabelas.
- Largue a mesa velha.
Você provavelmente está travado no meio da etapa 3.
O único momento arriscado está na etapa 4, que é muito rápida. Antes disso, a velha mesa ainda está viva e bem. Depois disso, a nova tabela a substituiu.