Какой самый безопасный способ уборки?
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 дней, работал так:
- Создайте новую пустую таблицу, подобную существующей.
- Измените схему (в вашем случае добавьте столбец)
- Скопировать все данные из существующей таблицы в новую. (Медленная часть)
- Переименуйте несколько таблиц.
- Уберите старую таблицу.
Вероятно, вы застряли на середине шага 3.
Единственное рискованное время — на шаге 4, который очень быстрый. До этого старая таблица все еще жива и здорова. После этого новая таблица ее заменила.