Назад | Перейти на главную страницу

MySQL скопирует временную таблицу с заполненным диском, как мне удалить временные файлы?

Какой самый безопасный способ уборки?

Сервер MySQL 5.5.62-0 на Debian 8 без репликации.

Я сделал ошибку и создал новый столбец в таблице размером 26 ГБ. SHOW PROCESSLIST показал, что MySQL копирует данные в таблицу tmp на 100% 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 |
+-----------+------+-----------+--------+---------+------+-------------------+------------------+

Через несколько минут основной раздел был заполнен, а ЦП упал до 0. Я использовал systemctl stop mysql надеясь, что он очистит временные файлы. Служба тоже не перезапускалась.

$ 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.

Я выключил VPS и расширил диск. Сервер перезапустился нормально, и я смог запустить процесс MySQL и подключиться к нему. Вроде все работает.

Однако использование диска не уменьшилось с момента инцидента 20 минут назад.

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

Начнется ли уборка, или мне нужно вручную навести порядок, который я наделал? Как это сделать безопаснее всего?

Во-первых, из инструмента командной строки mysql:

kill 145904211;

Который должен убирать вещи. Если нет, поищите файлы, начинающиеся примерно так: #sql.... Один из них будет огромным с отметкой времени, когда ALTER бегал. Просто удалите его.

В целях безопасности ALTER, как минимум за 5,5 дней, работало так:

  1. Создайте новую пустую таблицу, подобную существующей.
  2. Измените схему (в вашем случае добавьте столбец)
  3. Скопируйте все данные из существующей таблицы в новую. (Медленная часть)
  4. Сделайте несколько переименований таблиц.
  5. Бросьте старый стол.

Вероятно, вы зависли в середине шага 3.

Единственное рискованное время - этап 4, который выполняется очень быстро. До этого старый стол все еще жив и здоров. После этого новый стол заменил его.