Страница 1 из 1

phpMyAdmin не видит таблиц в базе

Добавлено: 2013-01-11 12:53:24
dizazter
Добрый день!
Переустанавливал я давеча 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.
И так ругается на каждую таблицу в базе redmine и прочих.

Прочитав множество интернетов, как полезных, так и не очень, вывел общее для этой ситуации заключение:
"Нельзя вот так втупую копировать папки с базами, так как работать в этом случае ничерта не будет"
Хорошо. Уяснил.
Почитал инструкции о том, как вручную восстанавливать 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 по всем православным канонам является преступным и такая база не должна функционировать, то почему во втором случае этот варварский метод работает?
И главное - как добиться такого же эффекта в первом случае?

Re: phpMyAdmin не видит таблиц в базе

Добавлено: 2013-01-11 13:08:11
Bayerische
Да что ж так всё туго-то? Восстановите сервер нужной версии в исходной конфигурации. Запустите с имеющимися файлами. Сделайте дамп.

Re: phpMyAdmin не видит таблиц в базе

Добавлено: 2013-01-11 13:09:53
Gamerman
Если посмотреть файл /var/db/mysql/*.err, то скорее всего там будет ругань на файлы для InnoDB. Вот если эту ругань почитать, то может что-то и прояснится. Возможно, достаточно будет грохнуть файлы-логи InnoDB.

Для myIsam-таблиц можно просто копировать каталоги, для InnoDB - нет.

Re: phpMyAdmin не видит таблиц в базе

Добавлено: 2013-01-11 13:35:14
dizazter
Gamerman писал(а):Если посмотреть файл /var/db/mysql/*.err, то скорее всего там будет ругань на файлы для InnoDB. Вот если эту ругань почитать, то может что-то и прояснится. Возможно, достаточно будет грохнуть файлы-логи InnoDB.
В первом сообщении я и написал кусок лога из этого файла.
Все сводится к тому, что:
Gamerman писал(а): Для myIsam-таблиц можно просто копировать каталоги, для InnoDB - нет.
Я видел это утверждение.
И у меня не возникало бы вопросов, если бы во второй конфигурации простое копирование каталогов не имело положительного эффекта.
В этом-то и заключается основной вопрос: почему, если этого делать нельзя, оно тем не менее работает в старой конфигурации?
Может в какой-то ранней версии было можно, а теперь стало нельзя?

Re: phpMyAdmin не видит таблиц в базе

Добавлено: 2013-01-11 14:23:34
Bayerische
innodb file_per_table

Re: phpMyAdmin не видит таблиц в базе

Добавлено: 2013-01-11 15:13:25
dizazter
Разобрался.
Проблема была в моей невнимательности.
На "древнем" сервере базы были в MyISAM, потому там манипуляции с каталогами имели соответствующий эффект.
В то время как на свежеподнятом сервере - InnoDB, потому финт с копированием каталогов не прошел.