Como extrair o esquema da tabela apenas do arquivo .frm?

8

Eu extraí o diretório de dados do mysql de um backup e preciso obter o esquema de uma tabela antiga, no entanto, é um backup de uma máquina diferente.

Hoje li vários tutoriais sobre como fazer isso, mas sempre que parece falhar ou acabo tendo que reinstalar o mysql porque o mysql trava ou trava. Eu tentei o seguinte:

  • Crie um banco de dados diferente
  • Crie tabela com o mesmo nome nesse banco de dados
  • Substituir arquivo
  • Parar / ligar o motor
  • Recuperar do .frmarquivo

Eu tentei em várias ordens e combinações.

Existe alguma ferramenta externa que pode extrair o esquema do .frmarquivo? Eu posso ver os nomes das colunas se eu abrir o arquivo. Dei uma olhada, mas não consigo encontrar nada que me permita fazer isso.

Desde já, obrigado.

Relequestual
fonte

Respostas:

8

No TwinDB, criamos uma interface da web para mysqlfrm. É grátis e fácil de usar.

Para recuperar a estrutura da tabela, basta fazer o upload do arquivo .frm.

Aqui estão os passos. 1. Abra https://recovery.twindb.com/ . Clique em "Recuperar estrutura" insira a descrição da imagem aqui

  1. No próximo submenu, clique em "do arquivo .frm" insira a descrição da imagem aqui

  2. Na próxima exibição, clique em "Procurar" e selecione um arquivo .frm em um disco local. Clique em "Upload" insira a descrição da imagem aqui

  3. Espere até que esteja fazendo a mágica insira a descrição da imagem aqui

  4. Obtenha a estrutura recuperada. insira a descrição da imagem aqui

Também é possível fazer upload de um arquivo morto com vários arquivos .frm. O site irá recuperá-los completamente.

akuzminsky
fonte
2
O site não funciona mais.
Anbuselvan Rocky 01/11/19
Download @AnbuselvanRocky mysqlfrm(baixei a versão 1.6.5) e executemysqlfrm --diagnostic /path/to/my_table.frm
MyTitle
5

Eu já respondi perguntas como essa antes

Mencionei um blog do Chris Calendar sobre como conectar.ibd arquivos ao dicionário de dados.

Se você não o .ibdacompanha .frm, é provável que o MySQL esteja rodando com innodb_file_per_table desativado. Por favor, consulte o Feb 03, 2012post sobre isso. Se este for Linux, certifique-se de executar

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

antes de iniciar o mysql.

De uma chance !!!

INFORMAÇÕES SUPLEMENTARES

No final desse último blog, diz:

Ok, eu sou viciado! Onde eu consigo isso?

O utilitário .frm reader faz parte do novo release-1.3.0 Alpha disponível como um download separado em http://dev.mysql.com/downloads/tools/utilities/ . Basta escolher o repositório da plataforma ou o repositório de origem e fazer o download.

Agradecemos seus comentários e esperamos que esse utilitário ajude a expandir seu kit de ferramentas de diagnóstico e recuperação.

ATUALIZAÇÃO 11-06-2013 14:05 EDT

Tenho boas notícias. Eu instalei a versão do Windows do MySQL Utilities. Testei o programa mysqlfrm na linha de comando. Eu testei obtendo as .frminformações do user.frm no esquema mysql. Aqui está o que eu tenho:

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>

Realmente funciona. O banco de dados está sendo executado no meu computador desktop usando a porta 3306. Eu tive que fornecer o 3307 como uma porta para executar um processo gerado.

Eu poderia mover o .frmde uma caixa Linux para a máquina Windows e fazer o mesmo.

De uma chance !!!

RolandoMySQLDBA
fonte