@LayneBuchyn

Восстановление файлов БД MySQL на Debian GNU/Linux 6.0

Привет всем.
У меня сложилась очень неприятная ситуация.
Сегодня мне нужно было откатить БД.
Делал я это таким образом:
mysql -u root -p < /opt/bcp/project_db-2012-04-05-0141.sql
Когда откат закончился (дамп залился), мне предстояло увидеть очень неприятный сюрприз — в базе стало 12 таблиц вместо более чем 40. Случилась потеря очень важных данных. Посмотрев файл с дампом, я увидел, что он неполный.
Причины того, почему бэкап оказался коцнутым, здесь обсуждать не имеет смысла, но я стал думать, как теперь восстановить сегодняшнее состояние ДБ, с которого я откатился, попутно называя себя идиотом, что не сделал бэкап вручную, перед тем как откатываться.
Очевидно, что вариант восстановления один: попытаться восстановить сами файлы, в которых MySQL хранил таблицы ДБ. Если бы таблицы имели тип MyIsam, то каждая таблица хранилась бы в отдельном файле, который можно было бы попытаться восстановить с помощью одной из утилит для восстановления удаленных файлов. Но все мои таблицы имели тип InnoDB, соответственно вся БД хранилась в одном файле.
Я только программист, и не являюсь даже продвинутым пользователем Линукса, поэтому не знаю точно, возможен ли мой вариант. А вариант такой:
В залитом дампе БД удалялась перед заливанием (стандартный DROP DATABASE IF EXISTS), значит удалялся и файл, в котором хранилась БД, а затем был создан заново при создании БД дампом.
Я хочу узнать — возможно ли, что одна из утилит для восстановления удалённых файлов сможет определить, что существовал такой-то файл, что он был удален, и можно ли его восстановить. Я конечно сомневаюсь в этом (хоть и надеюсь), потому как файл потом был заново создан.
Спасибо.
  • Вопрос задан
  • 6236 просмотров
Пригласить эксперта
Ответы на вопрос 3
DmZ
@DmZ
В залитом дампе БД удалялась перед заливанием (стандартный DROP DATABASE IF EXISTS), значит удалялся и файл, в котором хранилась БД, а затем был создан заново при создании БД дампом.

«БД» в MySQL это папка где хранятся файлы форм(структура таблиц)/индексов/данных. Если таблицы InnoDB то индексы/данные хранятся в другом месте — все в одном файле, и этот файл не удаляется при DROP DATABASE — просто место помечается как свободное. При DROP DATABASE удаляется папка с формами.
Если InnoDB настроено как innodb_file_per_table, тогда в папке лежат *.ibd файлы с данными а в ibdata1 хранится только метаданные.

При наличии бекапов некоторых файлов есть несколько вариантов восстановления: Из .frm и ibdata1/ib_logfile{0,1}, при наличии схемы и *.ibd файлов

В вашем же случае, имхо, проще восстановится с бекапа предыдущего дня…
Ответ написан
pluser
@pluser
>Причины того, почему бэкап оказался коцнутым, здесь обсуждать не имеет смысла
Хоть намекните дабы другие не напоролись на подобное
Ответ написан
uran238
@uran238
И выкиньте этот mysqldump, используйте xtrabackup, он бекапит без лока таблиц, и работает намного быстрее.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы