Переустанавливал я давеча FreeBSD на одном из тестовых серверов и "забекапил" директорию со всеми базами MySQL (/var/db/mysql) путем простого копирования содержимого.
Установил с нуля FreeBSD(9.0), поставил MySQL(5.5.29), Apache(2.2.23), PHP(5.4.10), phpMyAdmin(3.5.5).
Ну и соответственно вернул "забекапленные" базы на их прежнее место в /var/db/mysql
Захожу в MySQL, выбираю любую из баз, по команде SHOW TABLES получаю весь список таблиц в базе.
Захожу в phpMyAdmin, вижу список баз, возле каждой в скобках написано количество таблиц в базе.
Но, когда открываю любую из этих баз, то phpMyAdmin говорит, что в базе нет таблиц.
В логах MySQL наблюдаю вот такую картину:
Код: Выделить всё
130110 15:30:39 [ERROR] Cannot find or open table redmine/boards from
the internal data dictionary of InnoDB though the .frm file for the
table exists. Maybe you have deleted and recreated InnoDB data
files but have forgotten to delete the corresponding .frm files
of InnoDB tables, or you have moved .frm files to another database?
or, the table contains indexes that this version of the engine
doesn't support.
See http://dev.mysql.com/doc/refman/5.5/en/innodb-troubleshooting.html
how you can resolve the problem.
Прочитав множество интернетов, как полезных, так и не очень, вывел общее для этой ситуации заключение:
"Нельзя вот так втупую копировать папки с базами, так как работать в этом случае ничерта не будет"
Хорошо. Уяснил.
Почитал инструкции о том, как вручную восстанавливать InnoDB базу, если есть только .frm файлы.
Например наткнулся на вот такой мануал:
http://yapatha.livejournal.com/255447.html
Геморно, долго, нудно. Но, это вроде как единственный способ восстановления базы.
Дескать, такова расплата за отсутствие правильных бекапов.
Хорошо.
Рядом у меня болтается другой тестовый сервер, который я поднимал еще в 2009 году.
Там установлено:
FreeBSD 7.1
MySQL 5.1.36
Apache 2.2.17
PHP 5.2.10
Так вот, когда я на нем провожу подобные манипуляции с базами MySQL: копирую их, дублирую и всячески перемещаю путем операций с директориями в /var/db/mysql, то картина совсем иная.
Достаточно скопировать базу redmine в new_redmine и phpMyAdmin показывает всю структуру новой базы, видит таблицы и т.п.
Соответственно с базой new_redmine можно работать безо всяких плясок с бубном.
И такие архипреступные и неправильные операции можно проделывать с абсолютно любой базой, без потери функциональности.
Из-за этого я свято верил в работоспособность подобных "бекапов".
В связи с этим у меня возникает резонный вопрос - если простое копирование директории с базой, в которой находятся файлы .frm по всем православным канонам является преступным и такая база не должна функционировать, то почему во втором случае этот варварский метод работает?
И главное - как добиться такого же эффекта в первом случае?