Восстановление данных innodb с помощью Percona

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

Восстановление данных innodb с помощью Percona: 3 комментария

  1. «Подключаемся к MySQL» ?
    Автор, ты сам пробовал делать то что написал ?
    В 90% случаев, подключиться к Мускулю ты не сможешь, по той причине что он не запускается если сломаны таблицы.
    Лол.

Добавить комментарий

Ваш адрес email не будет опубликован.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.