Как извлечь схему таблицы только из файла .frm?

8

Я извлек каталог данных mysql из резервной копии, и мне нужно получить схему из старой таблицы, однако это резервная копия с другого компьютера.

Сегодня я прочитал немало учебников о том, как это сделать, но каждый раз, когда это кажется неудачным, или мне приходится переустанавливать mysql из-за зависания или сбоя mysql. Я пробовал следующее:

  • Создать другую базу данных
  • Создать таблицу с тем же именем в этой базе данных
  • Заменить файл
  • Стоп / Пуск двигателя
  • Восстановить из .frmфайла

Я пробовал в различных заказах и комбинациях.

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

Заранее спасибо.

Relequestual
источник

Ответы:

8

В TwinDB мы создали веб-интерфейс для mysqlfrm. Это бесплатно и легко в использовании.

Чтобы восстановить структуру таблицы, вам просто нужно загрузить файл .frm.

Вот шаги. 1. Откройте https://recovery.twindb.com/ . Нажмите «Восстановить структуру» введите описание изображения здесь

  1. В следующем подменю нажмите «из .frm файла» введите описание изображения здесь

  2. В следующем окне нажмите «Обзор» и выберите файл .frm на локальном диске. Нажмите «Загрузить» введите описание изображения здесь

  3. Подождите, пока он не сделает волшебство введите описание изображения здесь

  4. Получить восстановленную структуру. введите описание изображения здесь

Также возможно загрузить архив с кучей файлов .frm. Сайт полностью их восстановит.

akuzminsky
источник
2
Сайт больше не работает.
Anbuselvan Rocky
Загрузите @AnbuselvanRocky mysqlfrm(я скачал версию 1.6.5) и запустите этоmysqlfrm --diagnostic /path/to/my_table.frm
MyTitle
5

Я уже отвечал на такие вопросы раньше

Я сослался на блог Криса Календаря о подключении .ibdфайлов обратно к словарю данных.

Если у вас нет .ibdс этим .frm, скорее всего, MySQL работал с отключенной innodb_file_per_table . Пожалуйста, обратитесь к Feb 03, 2012посту об этом. Если это Linux, убедитесь, что вы запустили

cd /var/lib/mysql
chown -R mysql:mysql *

перед запуском mysql.

Попробуйте!

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ

В нижней части этого последнего блога написано:

Хорошо, я подключен! Где я могу получить это?

Утилита .frm для чтения является частью новой версии 1.3.0 Alpha, доступной для отдельной загрузки по адресу http://dev.mysql.com/downloads/tools/utilities/ . Просто выберите репозиторий платформы или исходный репозиторий и загрузите его.

Мы приветствуем ваши комментарии и надеемся, что эта утилита поможет расширить ваш инструментарий диагностики и восстановления.

ОБНОВЛЕНИЕ 2013-06-11 14:05 ПО ВОСТОЧНОМУ ВРЕМЕНИ

У меня хорошие новости. Я установил версию MySQL для Windows. Я тестировал программу mysqlfrm из командной строки. Я протестировал получение .frmинформации от user.frm в схеме mysql. Вот что я получил:

C:\MySQL_5.6.10\data\mysql>mysqlfrm --server=root:rootpassword@localhost mysql:user.frm --port=3307
# Source on localhost: ... connected.
# Starting the spawned server on port 3307 ... done.
# Reading .frm files
#
# Reading the user.frm file.
#
# CREATE statement for user.frm:
#

CREATE TABLE `mysql`.`user` (
  `Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',
  `User` char(16) COLLATE utf8_bin NOT NULL DEFAULT '',
  `Password` char(41) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT '',
  `Select_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Insert_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Update_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Delete_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Drop_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Reload_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Shutdown_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Process_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `File_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Grant_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `References_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Index_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Alter_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Show_db_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Super_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_tmp_table_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Lock_tables_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Execute_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Repl_slave_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Repl_client_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_view_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Show_view_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_routine_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Alter_routine_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_user_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Event_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Trigger_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_tablespace_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `ssl_type` enum('','ANY','X509','SPECIFIED') CHARACTER SET utf8 NOT NULL DEFAULT '',
  `ssl_cipher` blob NOT NULL,
  `x509_issuer` blob NOT NULL,
  `x509_subject` blob NOT NULL,
  `max_questions` int(11) unsigned NOT NULL DEFAULT '0',
  `max_updates` int(11) unsigned NOT NULL DEFAULT '0',
  `max_connections` int(11) unsigned NOT NULL DEFAULT '0',
  `max_user_connections` int(11) unsigned NOT NULL DEFAULT '0',
  `plugin` char(64) COLLATE utf8_bin DEFAULT '',
  `authentication_string` text COLLATE utf8_bin,
  `password_expired` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  PRIMARY KEY (`Host`,`User`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Users and global privileges'

#...done.

C:\MySQL_5.6.10\data\mysql>

Это реально работает. База данных работает на моем настольном компьютере с использованием порта 3306. Мне нужно было указать 3307 как порт для запуска порожденного процесса.

Я мог бы переместить .frmс Linux на компьютер с Windows и сделать то же самое.

Попробуйте!

RolandoMySQLDBA
источник