К сожалению, восстановить таблицу в innodb не всегда просто, но есть замечательная утилита — Percona data recovery tool for innodb
Нам важно иметь *.ibd файл таблицы, а так же знать структуру таблицы (можно вытащить из старого бекапа, к примеру).
Дропаем таблицу, предварительно сохранив ibd файл, создаем ее.
Восстанавливать будем на примере таблицы comments, базы mysubercartbiz_db.
Качаем утилиту и распаковываем
cd /usr/src
wget http://launchpad.net/percona-data-recovery-tool-for-innodb/trunk/release-0.4/+download/percona-innodb-recovery-tool.tar.gz
tar xzf percona-innodb-recovery-tool.tar.gz
cd percona-data-recovery-tool-for-innodb-0.5
Теперь нам нужно знать структуру таблицы и задать ее в файле include/table_defs.h. Воспользуемся встроенным скриптом.
./create_defs.pl —host localhost —user debian-sys-maint —password aE7rsIkxc992fUKJ —db mysubercartbiz_db —table comments > include/table_defs.h
Собираем
make
Копируем файл comments.ibd
cp /data/comments.ibd ./
Парсим данные
./page_parser -f comments.ibd -5
Где -f путь до файла
-5 — версия MySQL
У нас создалась папка pages-1318745314 (или подобная). С кучей *.page файлов.
Нам нужны файлы из папки pages-1318745314/FIL_PAGE_INDEX
Для начала нужно объединить файлы в папках. Делаем так:
find pages-1318745314/FIL_PAGE_INDEX/0-61/ -type f -name ‘*.page’ | sorn -n | xargs cat > pages-1318745314/FIL_PAGE_INDEX/0-61/pages_concatenated
find pages-1318745314/FIL_PAGE_INDEX/0-62/ -type f -name ‘*.page’ | sort -n | xargs cat > pages-1318745314/FIL_PAGE_INDEX/0-62/pages_concatenated
И т.д., в зависимости от количества папок.
Далее, с помощью программы constraints_parser форматируем в нужный для импорта вид:
./constraints_parser -5 -f pages-1318745314/FIL_PAGE_INDEX/0-61/pages_concatenated > comments.dat
./constraints_parser -5 -f pages-1318745314/FIL_PAGE_INDEX/0-62/pages_concatenated >> comments.dat
В итоге мы получим файл comments.dat с данными.
Теперь нужно импортировать его. Подключаемся к MySQL с пользователем, у которого есть file_priv. Это root, а так же debian-sys-maint (по умолчанию).
И импортируем данные (пример запроса будет выдан при выполнении скрипта constraints_parser.
LOAD DATA INFILE ‘/usr/src/percona-data-recovery-tool-for-innodb-0.5/comments.dat’ REPLACE INTO TABLE `comments` FIELDS TERMINATED BY ‘\t’ OPTIONALLY ENCLOSED BY ‘»‘ LINES STARTING BY ‘comments\t’ (cid, pid, nid, uid, subject, comment, hostname, timestamp, status, format, thread, name, mail, homepage);