MySQL innodb восстановление после файлов данных

Вчера вечером мой сервер MySQL отказал, и теперь у меня есть несколько баз данных, какие данные я не могу восстановить.

Согласно errorlog, повреждения в табличных областях произошли долгое время назад (несколько месяцев), но никто не заметил, что и вчера, когда MySQL отказал (по совершенно другой причине), этому просто не удалось запуститься со следующей ошибки:

2015-06-09 23:09:23 14642 [Note] InnoDB: Starting crash recovery.
2015-06-09 23:09:23 14642 [Note] InnoDB: Reading tablespace information from the .ibd files...
2015-06-09 23:09:24 14642 [ERROR] InnoDB: Tried to read 16384 bytes at offset 0. Was only able to read 0.
2015-06-09 23:09:24 7f648369a7e0  InnoDB: Operating system error number 2 in a file operation.
InnoDB: The error means the system cannot find the path specified.
InnoDB: If you are installing InnoDB, remember that you must create
InnoDB: directories yourself, InnoDB does not create them.
2015-06-09 23:09:24 14642 [ERROR] InnoDB: File (unknown): 'read' returned OS error 71. Cannot continue operation

Когда дб был запущен с innodb-force-recovery набор к 6, запущенный сервер, с тоннами тех сообщений в журнале ошибок:

2015-06-09 23:16:50 16659 [ERROR] InnoDB: Failed to find tablespace for table '"db1234"."tbl456"' in the cache. Attempting to load the tablespace with space id 275772.

Мне удалось вывести большинство баз данных и импортировать их к каталогу достоверных данных. Но некоторые dbs повредили табличную область, и я не могу вывести их (или даже открыть любую таблицу в них).

Таким образом, теперь у меня есть несколько (приблизительно сто) базы данных, которые не могут быть загружены в живой сервер MySQL. У меня есть их файлы данных (и .frm и .ibd файлы), но они так или иначе повреждаются, и MySQL не может открыть их:

2015-06-10 18:37:18 3965 [Warning] InnoDB: Cannot open table db123/tbl456 from the internal data dictionary of InnoDB though the .frm file for the table exists. See http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html for how you can resolve the problem.

Я пытался скопировать файлы данных в другой экземпляр MySQL, но без успеха, я даже пытался создать новые .frm файлы (но я не знаю структуру таблиц), остановите сервер, замените их правильными, запустите сервер и откройте их - снова без успеха.

К сожалению, у меня нет резервного копирования тех баз данных, потому что они были повреждены давным-давно, и резервным дампам не удалось сохранить любые данные.

Таким образом, теперь я имею данные в innodb файлах данных, но не могу загрузить их в живой сервер. Есть ли какой-либо путь, как сохранить их?

Я нашел этот инструментарий: https://www.percona.com/software/mysql-innodb-data-recovery-tools, но я не уверен, возможно ли для меня использовать его, его довольно сложный, и я не вижу, как восстановить сто баз данных, какая структура неизвестна мне..

Сервер использует MySQL 5.6.17, скомпилированный из источника.

2
задан 10 June 2015 в 20:21
1 ответ

Как автор Percona набор инструментов для восстановления данных Я рекомендую вам использовать набор инструментов для восстановления данных TwinDB . Последние два года инструментарий Percona не совершенствовался, и все новые функции переходят в инструментарий TwinDB. Ваш случай описан в сообщении Восстановить поврежденную базу данных MySQL

Для восстановления структуры таблицы вы можете использовать инструмент mysqlfrm или восстановить структуру из словаря InnoDB

2
ответ дан 3 December 2019 в 11:37

Теги

Похожие вопросы