Comment extraire le schéma de table à partir du fichier .frm uniquement?

8

J'ai extrait le répertoire de données de mysql à partir d'une sauvegarde et j'ai besoin d'obtenir le schéma d'une ancienne table, mais c'est une sauvegarde d'une autre machine.

J'ai lu un bon nombre de tutoriels aujourd'hui sur la façon de le faire, mais chaque fois que cela semble échouer ou que je dois réinstaller mysql parce que mysql se bloque ou se bloque. J'ai essayé ce qui suit:

  • Créer une base de données différente
  • Créer une table avec le même nom dans cette base de données
  • Remplacer le fichier
  • Arrêter / démarrer le moteur
  • Récupérer à partir du .frmfichier

J'ai essayé dans différentes commandes et combinaisons.

Existe-t-il un outil externe pouvant extraire le schéma du .frmfichier? Je peux voir les noms des colonnes si j'ouvre le fichier. J'ai jeté un œil mais je n'arrive pas à trouver quoi que ce soit qui me permette de le faire.

Merci d'avance.

Relequestual
la source

Réponses:

8

Chez TwinDB, nous avons construit une interface Web pour mysqlfrm. C'est gratuit et facile à utiliser.

Pour récupérer la structure de la table, il vous suffit de télécharger le fichier .frm.

Voici les étapes. 1. Ouvrez https://recovery.twindb.com/ . Cliquez sur "Récupérer la structure" entrez la description de l'image ici

  1. Dans le sous-menu suivant, cliquez sur "à partir du fichier .frm" entrez la description de l'image ici

  2. Dans la vue suivante, cliquez sur "Parcourir" et sélectionnez un fichier .frm sur un disque local. Cliquez sur "Upload" entrez la description de l'image ici

  3. Attends qu'il fasse la magie entrez la description de l'image ici

  4. Obtenez la structure récupérée. entrez la description de l'image ici

Il est également possible de télécharger une archive avec un tas de fichiers .frm. Le site les récupérera complètement.

akuzminsky
la source
2
Le site ne fonctionne plus.
Anbuselvan Rocky
@AnbuselvanRocky Télécharger mysqlfrm(j'ai téléchargé la version 1.6.5), et lancez cecimysqlfrm --diagnostic /path/to/my_table.frm
MyTitle
5

J'ai déjà répondu à des questions comme celle-ci

J'ai fait référence à un blog de Chris Calendar sur la reconnexion des .ibdfichiers au dictionnaire de données.

Si vous n'avez pas le .ibdlong avec .frm, il y a des chances que MySQL fonctionne avec innodb_file_per_table désactivé. Veuillez vous référer à l' Feb 03, 2012article à ce sujet. Si c'est Linux, assurez-vous d'exécuter

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

avant de démarrer mysql.

Essaie !!!

INFORMATIONS COMPLÉMENTAIRES

Au bas de ce dernier blog, il est écrit:

Ok, je suis accro! Où peux-je le recevoir?

L'utilitaire de lecture .frm fait partie de la nouvelle version 1.3.0 Alpha disponible en téléchargement séparé sur http://dev.mysql.com/downloads/tools/utilities/ . Choisissez simplement le référentiel de plateforme ou le référentiel source et téléchargez-le.

Nous apprécions vos commentaires et espérons que cet utilitaire vous aidera à étendre votre boîte à outils de diagnostic et de récupération.

MISE À JOUR 2013-06-11 14:05 EDT

J'ai de bonnes nouvelles. J'ai installé la version Windows des utilitaires MySQL. J'ai testé le programme mysqlfrm à partir de la ligne de commande. J'ai testé l'obtention des .frminformations depuis user.frm dans le schéma mysql. Voici ce que j'ai obtenu:

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>

Ça marche vraiment. La base de données fonctionne sur mon ordinateur de bureau à l'aide du port 3306. J'ai dû donner 3307 comme port pour exécuter un processus généré.

Je pourrais déplacer la .frmboîte Linux vers la machine Windows et faire de même.

Essaie !!!

RolandoMySQLDBA
la source