Сам виноват: привык что с MyISAM таблицами вместо DROP TABLE можно просто стереть файлы из каталога.
Ситуация: имеется база данных с таблицами InnoDB. При первой попытке восстановить базу данных из резервного дампа наткнулся на ошибку, связанную с внешними ключами «MySQL – отключить проверку на внешние ключи«. И недолго думая, по старинке, просто стер файлы из репозитория mysql.
С MyISAM это прошло бы хорошо, но у InnoDB другая организация хранения таблиц, поэтому при втором восстановлении базы данных вылезла новая ошибка в логах MySQL
InnoDB: data dictionary. Have you deleted the .frm file
InnoDB: and not used DROP TABLE? Have you used DROP DATABASE
InnoDB: for InnoDB tables in MySQL version <= 3.23.43? InnoDB: See the Restrictions section of the InnoDB manual. InnoDB: You can drop the orphaned table inside InnoDB by InnoDB: creating an InnoDB table with the same name in another InnoDB: database and copying the .frm file to the current database. InnoDB: Then MySQL thinks the table exists, and DROP TABLE will InnoDB: succeed.
Решение, в принципе, описано в логе. Для тех кто не дружит с английским языком (dbname — рабочая база данных, dbtmp — «другая» база данных, tblname — имя нашей проблемной таблицы):
1. Создать таблицу с такой же структурой и именем tblname в другой базе данных dbtmp.
2. В репозитории mysql СКОПИРОВАТЬ файл tblname.frm из каталога dbtmp в каталог dbname.
3. Выполнить
DROP TABLE dbtmp.tblname;
DROP TABLE dbname.tblname;
4. Готово. Теперь можно восстанавливать таблицы InnoDB из дампа.
(c) Vor’Chun
адрес этой статьи http://vorchun.ru/kompyutery/soft/mysql-oshibka-vosstanovleniya-tablicy-innodb-iz-dampa/
Что еще почитать: