Я пытаюсь преобразовать .frm (файлы данных SQL) в текстовые файлы. Резонно для этого, потому что я хочу посмотреть, как движок SQL хранит данные "за кулисами", например: при использовании хранилища "ENUM" SQL "INTEGER", называемый "INDEX", поэтому, если кто-то знает программное обеспечение или метод для преобразования .frm в .txt, спасибо всем и хорошего дня.

1 ответ1

1

Эта статья предоставляет проверенный способ сделать это:

Основы того, как это сделать, не так сложно понять, это детали, которые становятся хитрыми. Первая часть этой проблемы - как извлечь определение таблицы из файлов .frm. Я рассмотрю вторую часть проблемы в другом посте. Вы могли бы написать программу, которая читает и анализирует файл .frm и выводит определение таблицы, но это большая работа, особенно когда вы можете обмануть MySQL, сделав это за вас. Вот как вы могли бы сделать это для файла foo.frm.

mysql> CREATE TABLE `test`.`foo` (id int) ENGINE=InnoDB;

Мы создали таблицу InnoDB с именем foo. MySQL написал файл foo.frm и foo.ibd в $ datadir/test. Он также сделал запись этой таблицы в словаре данных.

mysql> FLUSH TABLES;

Это заставляет MySQL закрыть все открытые таблицы и очистить кеш запросов. Идея состоит в том, чтобы заставить MySQL забыть о таблице «foo», которую мы только что создали.

bash# cp foo.frm /var/lib/mysql/test;

Мы просто переписали определение таблицы для test.foo. Мы сделали это горячо, пока MySQL еще работал.

mysql> SHOW CREATE TABLE `test`.`foo`;

Это выведет определение таблицы для файла foo.frm, который мы только что скопировали в тестовый каталог. MySQL, вероятно, будет немного сбит с толку, так как информация в файле .frm вряд ли будет соответствовать той, что находится в системном табличном пространстве. Вы, вероятно, увидите сообщение в журнале ошибок:

[ОШИБКА] Таблица ./test/foo не имеет первичного ключа в словаре данных InnoDB, но есть в MySQL! Если вы создали таблицу с версией MySQL <3.23.54 и не определили первичный ключ, но определили уникальный ключ со всеми столбцами, отличными от NULL, MySQL внутренне воспринимает этот ключ как первичный ключ. Вы можете исправить эту ошибку, нажав dump + DROP + CREATE + re import таблицы.

Это нормально, просто уберись.

mysql> DROP TABLE `test`.`foo`;

Чтобы избежать раздражения необходимости проходить через это для нескольких сотен таблиц, используйте скрипт, представленный на странице : bluegecko article. Вы должны быть отсортированы. Chagbert.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .