Преобразовать .frm (файлы данных SQL) в текстовые файлы

Преобразовать .frm (файлы данных SQL) в текстовые файлы

Я пытаюсь преобразовать .frm (файлы данных SQL) в текстовые файлы. Причина этого в том, что я хочу увидеть, как движок SQL хранит данные «за кулисами». Например: при использовании хранилища SQL «ENUM» «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 + повторного импорта таблицы.

Но это ничего, просто приберитесь.

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

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

Связанный контент