Вчера вечером мой сервер 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, скомпилированный из источника.
Как автор Percona набор инструментов для восстановления данных Я рекомендую вам использовать набор инструментов для восстановления данных TwinDB . Последние два года инструментарий Percona не совершенствовался, и все новые функции переходят в инструментарий TwinDB. Ваш случай описан в сообщении Восстановить поврежденную базу данных MySQL
Для восстановления структуры таблицы вы можете использовать инструмент mysqlfrm или восстановить структуру из словаря InnoDB