Wie kann das Tabellenschema nur aus der .frm-Datei extrahiert werden?

8

Ich habe das Datenverzeichnis von MySQL aus einer Sicherung extrahiert und muss das Schema aus einer alten Tabelle abrufen, es ist jedoch eine Sicherung von einem anderen Computer.

Ich habe heute eine ganze Reihe von Tutorials darüber gelesen, aber jedes Mal, wenn es fehlschlägt oder ich MySQL neu installieren muss, weil MySQL hängt oder abstürzt. Ich habe folgendes versucht:

  • Erstellen Sie eine andere Datenbank
  • Erstellen Sie eine Tabelle mit demselben Namen in dieser Datenbank
  • Datei ersetzen
  • Motor stoppen / starten
  • Wiederherstellen aus der .frmDatei

Ich habe es in verschiedenen Reihenfolgen und Kombinationen versucht.

Gibt es ein externes Tool, das das Schema aus der .frmDatei extrahieren kann ? Ich kann die Spaltennamen sehen, wenn ich die Datei öffne. Ich habe nachgesehen, aber ich kann anscheinend nichts finden, was mir dies ermöglicht.

Danke im Voraus.

Relequestual
quelle

Antworten:

8

Bei TwinDB haben wir ein Webinterface für erstellt mysqlfrm. Es ist kostenlos und einfach zu bedienen.

Um die Tabellenstruktur wiederherzustellen, müssen Sie nur die .frm-Datei hochladen.

Hier sind Schritte. 1. Öffnen Sie https://recovery.twindb.com/ . Klicken Sie auf "Struktur wiederherstellen" Geben Sie hier die Bildbeschreibung ein

  1. Klicken Sie im nächsten Untermenü auf "Aus .frm-Datei". Geben Sie hier die Bildbeschreibung ein

  2. Klicken Sie in der nächsten Ansicht auf "Durchsuchen" und wählen Sie eine .frm-Datei auf einer lokalen Festplatte aus. Klicken Sie auf "Hochladen" Geben Sie hier die Bildbeschreibung ein

  3. Warten Sie, bis es die Magie tut Geben Sie hier die Bildbeschreibung ein

  4. Holen Sie sich die wiederhergestellte Struktur. Geben Sie hier die Bildbeschreibung ein

Es ist auch möglich, ein Archiv mit einer Reihe von .frm-Dateien hochzuladen. Die Site wird sie insgesamt wiederherstellen.

akuzminsky
quelle
2
Die Seite funktioniert nicht mehr.
Anbuselvan Rocky
@AnbuselvanRocky Download mysqlfrm(ich habe Version 1.6.5 heruntergeladen ) und führen Sie dies ausmysqlfrm --diagnostic /path/to/my_table.frm
MyTitle
5

Ich habe solche Fragen schon einmal beantwortet

Ich habe zu einem genannten Blog von Chris Kalender auf .ibdVerbindungsdateien in dem Data Dictionary zurück.

Wenn Sie nicht die haben .ibdzusammen mit .frm, die Chancen sind MySQL mit lief innodb_file_per_table ab. Bitte beachten Sie den Feb 03, 2012Beitrag dazu. Wenn dies Linux ist, stellen Sie sicher, dass Sie ausführen

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

vor dem Start von MySQL.

Versuche es !!!

ZUSÄTZLICHE INFO

Am Ende dieses letzten Blogs steht:

Ok, ich bin süchtig! Wo kann ich das bekommen?

Das Dienstprogramm .frm reader ist Teil der neuen Version 1.3.0 Alpha, die als separater Download unter http://dev.mysql.com/downloads/tools/utilities/ verfügbar ist . Wählen Sie einfach das Plattform-Repository oder das Quell-Repository und laden Sie es herunter.

Wir freuen uns über Ihre Kommentare und hoffen, dass dieses Dienstprogramm zur Erweiterung Ihres Diagnose- und Wiederherstellungs-Toolkits beiträgt.

UPDATE 2013-06-11 14:05 EDT

Ich habe gute Nachrichten. Ich habe die Windows-Version der MySQL-Dienstprogramme installiert. Ich habe das Programm mysqlfrm über die Befehlszeile getestet. Ich habe getestet, wie die .frmInformationen von user.frm im MySQL-Schema abgerufen werden. Folgendes habe ich bekommen:

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>

Es funktioniert wirklich. Die Datenbank wird auf meinem Desktop-Computer unter Verwendung von Port 3306 ausgeführt. Ich musste 3307 als Port angeben, um einen erzeugten Prozess auszuführen.

Ich könnte die .frmvon einer Linux-Box auf den Windows-Computer verschieben und das Gleiche tun.

Versuche es !!!

RolandoMySQLDBA
quelle