К сожалению, восстановить таблицу в 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);