Сегодня сделал глупость – поторопился. И уложил MySQL. А дело было так…
Создал таблицу test1 с хранилищем InnoDB, и начал делать в нее load data infile. Но процесс затянулся, и я решил убить его. Зря. Убить процесс в мускуле не удалось, и я злостно его перезапустил.
После перезапуска MySQL запусти фоновое восстановление таблицы, и не отзывался ни на что. Потому был потушен еще раз.
Затем вместо того чтоб прописать в my.cnf
я остановил его и… грохнул test1.frm. Руками, на диске.
После перезапуска ничего не изменилось. И я уже запустил MySQL с указаной опцией. И тут я понял свою ошибку. А ведь надо было не удалять файл, а перезапуститься с innodb_force_recovery и сделать уже оттуда
В результате поисков было найдено решение: дампить БД, убивать БД, выкатывать БД из дампа. Так tablespace в InnoDB почистится.
Вывод: не торопиться и не пороть гарячку. Доки прийдется читать в любом случае, зато не нервничая при этом.
UPD: еще большей глупостью было убить логи не дожидаясь clean shutdown. Теперь лишь mysqldump –all-databases, убить, restore…
UPD2: удалением БД дело не ограничилось. Пришлось дампить все InnoDB таблицы, затем удалять /var/lib/ib*, в том числе и ibdata (при остановленом мускуле), запускать его и вкатывать дамп обратно.
На заметку:
forcing-recovery
Recovery howto