MyISAM
Для таблицы MyISAM mydb.mytable у вас должно быть три файла
\bin\mysql\mysql5.6.12\data\mydb\mytable.frm
\bin\mysql\mysql5.6.12\data\mydb\mytable.MYD
\bin\mysql\mysql5.6.12\data\mydb\mytable.MYI
Они уже должны быть доступны в виде таблицы, поскольку каждый файл содержит необходимые данные, метаданные и информацию индекса. В совокупности они образуют таблицу. Нет никаких механизмов доступа к внешнему хранилищу.
InnoDB
Взгляните на это графическое представление InnoDB
Единственное, что прикрепляет ibdata1 к .ibd
файлам, это словарь данных.
Ваша миссия, если вы решите принять ее, состоит в том, чтобы создать каждую таблицу и поменять местами .ibd
Прежде чем что-либо делать, сделайте полную копию "\ bin \ mysql \ mysql5.6.12 \ data" в другой
Вот образец
Предположим, у вас есть база данных mydb
с таблицей mytable
. Это означает
- У вас есть папка
\bin\mysql\mysql5.6.12\data\mydb
- Внутри этой папки у вас есть
Вам нужно .frm
. Если вы посмотрите на мой пост Как извлечь схему таблицы только из файла .frm? Вы можете скачать утилиту MySQL, которая может генерировать SQL, необходимый для создания таблицы.
Теперь вы должны сделать следующее
- Переместить
mytable.ibd
в\bin\mysql\mysql5.6.12\data
- Запустите SQL для создания таблицы InnoDB
- Войдите в MySQL и запустите
ALTER TABLE mydb.mytable DISCARD TABLESPACE;
(это удалит \bin\mysql\mysql5.6.12\data\mydb\mytable.ibd
)
- Скопировать
\bin\mysql\mysql5.6.12\data\mytable.ibd
в\bin\mysql\mysql5.6.12\data\mydb
- Войдите в MySQL и запустите
ALTER TABLE mydb.mytable IMPORT TABLESPACE;
(это будет зарегистрирован \bin\mysql\mysql5.6.12\data\mydb\mytable.ibd
в словаре данных)
После этого таблица mydb.mytable
должна быть полностью доступна. Вы можете проверить эту доступность, просто запустив:
SELECT * FROM mydb.mytable LIMIT 10;
Попробуйте!
НАПИТКА (Восстановление данных включает в себя необходимые знания) Ответственно
information_schema.key_column_usage
(возможно, и другие таблицы) не вернут первые данные,select
поэтому вам нужно выполнить хотя бы один запрос и подождать несколько секунд, прежде чем следующий запрос сможет работать. (mysql Ver 14.14 Distrib 5.7.19, для linux-glibc2.12 (x86_64) с использованием оболочки EditLine)