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