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