Fork me on GitHub

The WebDevil

Enjoy development

Сегодня сделал глупость – поторопился. И уложил MySQL. А дело было так…

Создал таблицу test1 с хранилищем InnoDB, и начал делать в нее load data infile. Но процесс затянулся, и я решил убить его. Зря. Убить процесс в мускуле не удалось, и я злостно его перезапустил.

После перезапуска MySQL запусти фоновое восстановление таблицы, и не отзывался ни на что. Потому был потушен еще раз.

Затем вместо того чтоб прописать в my.cnf

innodb_force_recovery = 4

я остановил его и… грохнул test1.frm. Руками, на диске.

После перезапуска ничего не изменилось. И я уже запустил MySQL с указаной опцией. И тут я понял свою ошибку. А ведь надо было не удалять файл, а перезапуститься с innodb_force_recovery и сделать уже оттуда

DROP TABLE test1;

В результате поисков было найдено решение: дампить БД, убивать БД, выкатывать БД из дампа. Так tablespace в InnoDB почистится.

Вывод: не торопиться и не пороть гарячку. Доки прийдется читать в любом случае, зато не нервничая при этом.

UPD: еще большей глупостью было убить логи не дожидаясь clean shutdown. Теперь лишь mysqldump –all-databases, убить, restore…

UPD2: удалением БД дело не ограничилось. Пришлось дампить все InnoDB таблицы, затем удалять /var/lib/ib*, в том числе и ibdata (при остановленом мускуле), запускать его и вкатывать дамп обратно.

На заметку:
forcing-recovery
Recovery howto

Comments are closed.