Ich habe zuvor eine Kopie des Verzeichnisses / var / lib / mysql / ddms gespeichert ("ddms" ist der Schemaname). Jetzt habe ich ein neues MySQL auf einem frisch installierten Ubuntu 10.04.3 LTS installiert apt-get install mysql-server
, ich glaube Version 5.1 wurde installiert. Nachdem ich das Verzeichnis ddms unter / var / lib / mysql kopiert habe, funktionieren einige seiner Tabellen einwandfrei. Dies sind die Tabellen mit einem zugehörigen Satz von drei Dateien: eine .frm-Datei, eine .MYD-Datei und eine .MYI-Datei.
Es gibt jedoch zwei Tabellen mit unterschiedlichen Dateigruppen: eine .frm-Datei und eine .ibd-Datei. Diese beiden Tabellen wurden in der Tabellenliste in phpMyAdmin nicht angezeigt. Wenn ich mir das Fehlerprotokoll ansehe, heißt es:
[ERROR] Cannot find or open table ddms/dictionary_item from
the internal data dictionary of InnoDB though the .frm file for the
table exists. Maybe you have deleted and recreated InnoDB data
files but have forgotten to delete the corresponding .frm files
of InnoDB tables, or you have moved .frm files to another database?
or, the table contains indexes that this version of the engine
doesn't support.
Bitte helfen Sie bei der Wiederherstellung dieser beiden Tabellen. Vielen Dank.
Antworten:
InnoDB-Tabellen können nicht wie MyISAM-Tabellen kopiert werden.
Das Kopieren der .frm- und .ibd-Dateien von einem Ort an einen anderen ist problematisch. Das Kopieren der .frm- und .ibd-Datei einer InnoDB-Tabelle ist nur dann sinnvoll, wenn Sie sicherstellen können, dass die Tablespace-ID der .ibd-Datei genau mit dem Tablespace-ID-Eintrag in den Metadaten der ibdata1-Datei übereinstimmt .
Ich habe in DBA StackExchange zwei Posts über dieses Tablespace-ID-Konzept geschrieben
Hier finden Sie einen hervorragenden Link zum erneuten Anhängen von .ibd-Dateien an ibdata1 im Falle von nicht übereinstimmenden Tablespace-IDs: http://www.chriscalender.com/?tag=innodb-error-tablespace-id-in-file . Nachdem Sie dies gelesen haben, sollten Sie sofort feststellen, dass das Kopieren von .ibd-Dateien einfach verrückt ist.
Sie können die Vorschläge vom Chris-Kalender-Link übernehmen oder zur alten Installation von mysql zurückkehren, mysql starten und dann die
ddms
Datenbank mysqldumpen . Importieren Sie dann diesen mysqldump in Ihre neue mysql-Instanz. Vertrauen Sie mir, das wäre viel einfacher.quelle
How to Recover an InnoDB table whose files were moved around
hat mir buchstäblich das Leben gerettet. Vielen Dank.Ich habe vor kurzem das gleiche Problem erlebt. Hier sind die Schritte, mit denen ich es gelöst habe, ohne mit der Tablespace-ID herumspielen zu müssen, wie RolandoMySQLDBA oben erwähnt. Ich bin auf einem Mac und habe MAMP verwendet, um die Datenbank so weit wiederherzustellen, dass ich sie in einen MySQL-Dump exportieren kann.
Den vollständigen Blog-Beitrag dazu finden Sie hier: http://www.quora.com/Jordan-Ryan/Web-Dev/How-to-Recover-innoDB-MySQL-files-using-MAMP-on-a-Mac
Du musst haben:
-ibdata1
-ib_logfile0
-ib_logfile1
-.FRM-Dateien aus Ihrem Ordner mysql_database
-Frische Installation von MAMP / MAMP Pro, die Sie zerstören möchten (falls erforderlich)
Kopieren Sie alle Ordner und Dateien, die im Archiv des mysql-Ordners enthalten sind, vom Produktionsserver (in meinem Fall mt Plesk-Umgebung). AUSSER NICHT ÜBERSCHREIBEN:
- / Programme / MAMP / db / mysql / mysql /
- / Applications / MAMP / db / mysql / mysql_upgrade_info
- / Applications / MAMP / db / mysql / performance_schema
Und voila, du solltest jetzt in der Lage sein, von phpMyAdmin aus auf die Datenbanken zuzugreifen, was für eine Erleichterung!
Aber wir sind noch nicht fertig, Sie müssen jetzt einen mysqldump ausführen, um diese Dateien in Ihrer Produktionsumgebung wiederherzustellen, und die phpmyadmin-Schnittstelle läuft bei großen Datenbanken ab. Folgen Sie den Schritten hier:
http://nickhardeman.com/308/export-import-large-database-using-mamp-with-terminal/
Unten als Referenz kopiert. Beachten Sie, dass bei einer Standardinstallation von MAMP das Kennwort "root" lautet.
So führen Sie mysqldump for MAMP mit Terminal aus
EXPORTDATENBANK VON MAMP [1]
Erster Schritt: Öffnen Sie ein neues Terminalfenster
Schritt 2: Navigieren Sie zur MAMP-Installation, indem Sie die folgende Zeile in Terminal cd / applications / MAMP / library / bin eingeben. Drücken Sie die Eingabetaste
Schritt 3: Schreiben Sie den Dump-Befehl ./mysqldump -u [BENUTZERNAME] -p [DATA_BASENAME]> [PATH_TO_FILE] Drücken Sie die Eingabetaste
Beispiel:
Schnelltipp: Um schnell zu einem Ordner zu navigieren, können Sie den Ordner in das Terminalfenster ziehen und er schreibt den Speicherort des Ordners. Es war ein großartiger Tag, an dem mir jemand dies zeigte.
Schritt 4: Diese Textzeile sollte erscheinen, nachdem Sie die Eingabetaste gedrückt haben. Passwort eingeben: Ratet mal, geben Sie Ihr Passwort ein und denken Sie daran, dass die Buchstaben nicht angezeigt werden, aber sie sind da. Drücken Sie die Eingabetaste
Fünfter Schritt: Überprüfen Sie den Ort, an dem Sie Ihre Datei gespeichert haben. Falls vorhanden, ERFOLG. Jetzt können Sie die Datenbank importieren, die als nächstes beschrieben wird.
Nachdem Sie Ihre MySQL-Datenbank exportiert haben, können Sie sie in die Produktionsumgebung importieren.
quelle
Ich habe meine MySQL 5.5 * .ibd- und * .frm-Dateien mit MySQL Utilites und MariaDB 10 wiederhergestellt.
1) Generieren von Create SQLs.
Sie können Ihre erstellten SQL-Dateien aus der Frm-Datei abrufen. Sie müssen Folgendes verwenden: https://dev.mysql.com/doc/mysql-utilities/1.5/de/mysqlfrm.html
shell> mysqlfrm --server = root: pass @ localhost: 3306 c: \ MY \ t1.frm - -port = 3310 Auf
andere Weise können Sie Ihre SQLs erstellen.
2) Erstellen Sie Ihre Tabellen
Erstellen Sie Ihre Tabellen in der Datenbank.
3) alter table xxx
discard tablespace Verwerfen Sie die Tabellen, die Sie durch Ihre * .ibd-Dateien ersetzen möchten.
4) Kopieren Sie Ihre * .ibd-Dateien (MySQL oder MariaDB) in den Datenpfad von MariaDB.
Zuerst versuche ich, MySQL 5.5 und 5.6 zum Wiederherstellen zu verwenden, aber die Datenbank stürzt ab und stoppt sofort, wenn ein Fehler mit der Tabellenbereichs-ID vorliegt. ( FEHLER 1030 (HY000): Fehler -1 vom Speichergerät )
Nachdem ich MariaDB 10.1.8 verwendet habe und meine Daten erfolgreich wiederhergestellt habe.
5) alter table xxx tablespace importieren
Wenn Sie diese Anweisung ausführen, warnt MariaDB vor Dateien, aber es ist nicht wichtig, Ihre Daten wiederherzustellen :) Die Datenbank wird weiterhin fortgesetzt und Sie können Ihre Daten sehen.
Ich hoffe, diese Informationen sind hilfreich für Sie.
quelle
mysqlfrm
(ausprobierte Versionen 1.3.5 und 1.6.5 mit MySQLs 5.6 und 5.7) keine korrekteCREATE
Definition lieferten , führte dies auch bei Verwendung von MySQL 5.7 ( das in MySQL 5.7.9 geänderte Standard-ROW_FORMAT ) zumSchema mismatch (Expected FSP_SPACE_FLAGS=0x21, .ibd file contains 0x0.)
Import des Tablespace. Manuelles HinzufügenROW_FORMAT=compact
am Ende derCREATE
Anweisung hat den Trick getan.Manually adding ROW_FORMAT=compact at the end of the CREATE statement did the trick.
Das hat auch bei mir funktioniert. Vielen Dank! 👍Ich hatte genau das gleiche Problem, nur die Dateien als Backup zu haben.
Was ich getan habe, um es zu lösen, war, die Datenbankdateien in / var / lib / mysql / yourdb und das ibdata1 zu kopieren, das in / var / lib / mysql gelegt wird.
Ich konnte dann überprüfen, ob ich auf die Tabellen mysql -u root -p dbname zugreifen und einige der zuvor beschädigten Tabellen abfragen konnte.
Anschließend habe ich die Datenbank mit mysqldump -u root -p [root_password] [Datenbankname]> dumpfilename.sql gesichert
quelle
Wenn Sie MAMP verwenden und MySQL nicht starten kann, nachdem Sie Ihre Dateien kopiert haben, habe ich es
innodb_force_recovery = 2
reingelegtmy.ini
und dann konnte ich mysql dazu bringen, meine Datenbank zu starten und zu exportieren.quelle
Wenn Sie die * .ibd-Datei auf dem ursprünglichen MySQL-Server wiederherstellen können, vergessen Sie nicht, auch die Dateizugriffsrechte wiederherzustellen. In meinem Fall (MySQL8 unter CentOS7) habe ich die Datei in /var/lib/mysql/db/tablename.ibd wiederhergestellt und Folgendes ausgeführt:
Vor dem Korrigieren der Zugriffsrechte führte der Zugriff auf die Tabelle zu dem Fehler "2006 MySQL Server ist verschwunden". Nach dem Festlegen der Zugriffsrechte funktionierte die Tabelle (auch ohne Neustart des mysqld-Dienstes).
quelle
Ich habe Posts zu ähnlichen Themen gesammelt (deren Antworten hier nicht gepostet wurden):
Lösung 1: https://dba.stackexchange.com/a/59978
Lösung 2: https://dba.stackexchange.com/a/71785 (+ anderer Beitrag dort)
Lösung 3: Wiederherstellungskit für Tabellen: https://twindb.com/how-to-recover-innodb-dictionary/
lösung 4: Stellen Sie die MySQL-Datenbank aus dem Datenordner ohne ibdata1 aus den ibd-Dateien wieder her
Lösung 5:
mysqlfrm
Befehl verwendenLösung 6: https://dba.stackexchange.com/a/159001
Lösung 7: https://dba.stackexchange.com/a/144573
quelle
Ich möchte nur noch eine Sache für Macos El Capitan-Benutzer hinzufügen. MySQL-Dienstprogramme werden für diese Version nicht unterstützt, daher ist der Befehl mysqlfrm nicht hilfreich. Ich habe meine Tabellenstrukturen mit dbsake wiederhergestellt, wie in diesem Link gezeigt: https://www.percona.com/blog/2015/12/16/recovering-table-structure-from-files-using-dbsake/
Alles was Sie tun müssen, ist dbsake zu installieren:
Verwenden Sie dann den Befehl frmdump und geben Sie den Pfad zu Ihrer .frm-Datei an:
Sie erhalten die Anweisung create. Sobald ich dies getan habe, habe ich einfach die Schritte 2 bis 5 befolgt, die bereits von @Ecd erwähnt wurden. Hoffe es hilft jemandem.
quelle
Ich schätze Ecd sehr. Was hat bei mir funktioniert:
1.- Ich hatte vor ein paar Monaten ein Backup der Basis. Dies hat mir geholfen, dieses Backup in xampp in Windows 10 zu heben und die Tabellen mit der Struktur zu erstellen (Konfiguration: Windows 10, xampp-windows-x64-7.1.30- 5-VC14) mysql my.ini Konfigurationsdatei am Ende
2.- Mit der alten Datenbank habe ich fortgefahren, alter table xxx discard tablespace für jede Tabelle in der Datenbank auszuführen, die ich wiederherstellen wollte, und dann die .ibd-Dateien des Datenordners in C: / xampp / mysql / data / system wurde gelöscht (in diesem Fall ist es dieser Pfad)
3.- Ich kopierte die .ibd-Dateien von der Datenbank, die ich wiederherstellen wollte, in den xampp-Ordner der alten Datenbank
4.- Nachdem die Dateien kopiert wurden, führen Sie Folgendes aus: alter table xxx import tablespace Für jede Tabelle in der Datenbank wird eine Warnung angezeigt, die jedoch ignoriert wird. Die Daten werden in die Tabelle geladen und können später exportiert werden.
5.- Exportieren Sie die gesamte Datenbank in eine SQL-Datei und bauen Sie diese erfolgreich auf!
Ich hoffe es hilft jemandem, der diese Situation hat, Grüße.
Englisch bereitgestellt von Google
quelle
Versuchen Sie dies mit MySQL-Dienstprogrammen auszuführen
Befehl / Shell-Promt
quelle