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

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

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

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

Я допустил ошибку и создал новый столбец в таблице размером 26 ГБ. SHOW PROCESSLISTЭто показало, что MySQL копирует данные в таблицу tmp при 100% загрузке ЦП.

+-----------+------+-----------+--------+---------+------+-------------------+------------------+
| 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% /

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

решение1

Сначала из инструмента командной строки mysql:

kill 145904211;

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

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

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

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

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

Связанный контент