it-swarm.com.de

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

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 Datei .frm

Ich habe es in verschiedenen Reihenfolgen und Kombinationen versucht.

Gibt es ein externes Tool, das das Schema aus der Datei .frm 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.

8
Relequestual

Bei TwinDB haben wir ein Webinterface für mysqlfrm erstellt. 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" enter image description here

  1. Klicken Sie im nächsten Untermenü auf "Aus .frm-Datei" enter image description here

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

  3. Warten Sie, bis es die Magie tut enter image description here

  4. Holen Sie sich die wiederhergestellte Struktur. (enter image description here

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

8
akuzminsky

Ich habe solche Fragen schon einmal beantwortet

Ich habe auf ein Blog von Chris Calendar beim Verbinden von .ibd - Dateien mit dem Datenwörterbuch verwiesen.

Wenn Sie nicht .ibd Zusammen mit .frm Haben, wurde MySQL wahrscheinlich mit innodb_file_per_table off ausgeführt. Bitte lesen Sie dazu den Beitrag Feb 03, 2012. 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 ich die .frm - Informationen von user.frm im MySQL-Schema erhalten habe. Folgendes habe ich bekommen:

C:\MySQL_5.6.10\data\mysql>mysqlfrm --server=root:[email protected] 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 den .frm Von einer Linux-Box auf den Windows-Computer verschieben und das Gleiche tun.

Versuche es !!!

5
RolandoMySQLDBA