web-dev-qa-db-fra.com

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

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 à partir d'une autre machine.

J'ai lu un bon nombre de tutoriels aujourd'hui sur la façon de le faire, mais à chaque fois, cela semble échouer ou 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 du .frm fichier

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

Existe-t-il un outil externe pouvant extraire le schéma du .frm fichier? 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.

8
Relequestual

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" enter image description here

  1. Dans le sous-menu suivant, cliquez sur "à partir du fichier .frm" enter image description here

  2. Dans la vue suivante, cliquez sur "Parcourir" et sélectionnez un fichier .frm sur un disque local. Cliquez sur "Télécharger" enter image description here

  3. Attendez qu'il fasse la magie enter image description here

  4. Obtenez la structure récupérée. enter image description here

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

8
akuzminsky

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

J'ai fait référence à un blog de Chris Calendar sur la connexion .ibd fichiers dans le dictionnaire de données.

Si vous n'avez pas le .ibd de même que .frm, il est probable que MySQL fonctionnait avec innodb_file_per_table off. Veuillez vous référer au Feb 03, 2012 poste à 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 alpha 1.3.0 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 du .frm informations de 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 en utilisant le port 3306. J'ai dû donner 3307 comme port pour exécuter un processus généré.

Je pourrais déplacer le .frm d'une boîte Linux vers la machine Windows et faites de même.

Essaie !!!

5
RolandoMySQLDBA