Disco preenchido com tabela temporária de cópia do MySQL, como faço para remover arquivos temporários?

Disco preenchido com tabela temporária de cópia do MySQL, como faço para remover arquivos temporários?

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 PROCESSLISTmostrou 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 mysqlesperava 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 ALTERestava em execução. Simplesmente exclua-o.

Por uma questão de segurança ALTER, pelo menos em 5,5 dias, funcionou assim:

  1. Crie uma tabela nova e vazia como a tabela existente.
  2. Altere o esquema (adicione uma coluna, no seu caso)
  3. Copie todos os dados da tabela existente para a nova. (A parte lenta)
  4. Faça algumas renomeações de tabelas.
  5. 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.

informação relacionada