Вот почему MySQL не может увидеть эти файлы: Системное табличное пространство (ibdata1) имеет специальный словарь данных Storagee-Engine, который позволяет InnoDB отобразить потенциальное использование таблиц:
ALTER TABLE tblname DISCARD TABLESPACE;
ALTER TABLE tblname IMPORT TABLESPACE;
Перемещение таблиц InnoDB из одного места в другое требует таких команд, как
ALTER TABLE mydb.tags DISCARD TABLESPACE;
Здесь приведена часть Документация по MySQL 5.5 с объяснением того, что следует считать
Соображения по переносу для файлов .ibd
Вы не можете свободно перемещать файлы .ibd между каталогами баз данных, как вы можете это сделать с файлами таблиц MyISAM. Определение таблицы, хранящейся в общем табличном пространстве InnoDB, включает в себя имя базы данных. Идентификаторы транзакций и номера последовательностей журналов, хранящиеся в файлах табличного пространства, также различаются между базами данных.
Для перемещения файла .ibd и связанной с ним таблицы из одной БД в другую используйте оператор ТАБЛИЦА РЕНЕЙМА:
ТАБЛИЦА ЗАМЕНЫ db1.tbl_Имя К db2.tbl_Имя; Если у вас есть “чистая” резервная копия файла .ibd, вы можете восстановить его в установке MySQL, из которой он был создан, следующим образом:
Таблица не должна быть уронена или усечена, так как вы скопировали файл .ibd, так как при этом изменяется идентификатор таблицы, хранящийся внутри табличного пространства.
Выдайте этот оператор ALTER TABLE для удаления текущего файла .ibd:
ALTER TABLE tbl_name DISCARD TABLESPACE; скопируйте резервный файл .ibd в соответствующий каталог БД.
Выдать оператор ALTER TABLE, чтобы сообщить InnoDB об использовании нового файла .ibd для таблицы:
ALTER TABLE tbl_name IMPORT TABLESPACE; В данном контексте “чистое” резервное копирование файла .ibd - это резервное копирование, для которого выполняются следующие требования:
В файле .ibd нет нефиксированных изменений по транзакциям.
В файле .ibd нет неупорядоченных записей буфера вставки.
Очищение удалило все записи индекса, помеченные как удаленные, из файла .ibd.
mysqld прошил все измененные страницы .ibd файла из буферного пула в файл.
Учитывая эти предостережения и протоколы, вот рекомендуемый курс действий
Например, давайте попробуем восстановить таблицу tags
в базу данных mydb
STEP #1
Убедитесь, что у вас есть резервные копии этих файлов .frm
и .ibd
в файлах /tmp/innodb_data
STEP #2
Получите оператор CREATE TABLE tags
и запустите его как CREATE TABLE mydb.tags ...
. Убедитесь, что это та же самая структура, что и оригинальная tags.frm
STEP #3
Удалите пустые tags.ibd
с помощью MySQL
cd /var/lib/mysql/mydb
cp /tmp/innodb_data.tags.ibd .
chown mysql:mysql tags.ibd
STEP #4
Принесите резервную копию tags.ibd
.
ALTER TABLE mydb.tags IMPORT TABLESPACE;
STEP #5
Добавить tags
таблицу в словарь данных InnoDB
SHOW CREATE TABLE mydb.tags\G
SELECT * FROM mydb.tags LIMIT 10;
STEP 6
Тест на доступность таблицы
Если вы получите нормальный результат, вы получите его, поздравляю вас с импортом таблицы InnoDB.
Шаг 7
В будущем, пожалуйста, не удаляйте ibdata1 и его журналы
Попробуйте !!!!
Я обсуждал подобные вещи раньше
CAVEAT
Что, если вы не знаете структуру таблиц tags
?
Есть инструменты для получения оператора CREATE TABLE только с помощью файла .frm
. Я также написал сообщение : Как извлечь схему таблицы только из файла .frm? . В этой заметке я скопировал файл .frm на машину под управлением Windows из Linux, запустил утилиту Windows и получил оператор CREATE TABLE
.