So stellen Sie die MySQL-Datenbank aus .myd-, .myi- und .frm-Dateien wieder her

183

Wie einer meiner MySQL - Datenbanken wiederherstellen aus .myd, .myi, .frmDateien?

chandrajeet
quelle
10
Obwohl ich darauf geantwortet habe, gehört es wirklich zu Serverfault.
Derobert
31
@chandrajeet du solltest wirklich die am meisten gewählte Antwort akzeptieren.
Turm
2
Hey chandrajeet, warum akzeptierst du nicht Deroberts Antwort? Ich bestätige, dass es auch bei mir funktioniert. Ist es nicht für dich? stackoverflow.com/help/someone-answers
Taz

Antworten:

173

Wenn es sich um MyISAM-Tabellen handelt, wird diese Tabelle durch Ablegen der Dateien .FRM, .MYD und .MYI in ein Datenbankverzeichnis (z. B. /var/lib/mysql/dbname) verfügbar gemacht. Es muss nicht dieselbe Datenbank sein, von der sie stammen, denselben Server, dieselbe MySQL-Version oder dieselbe Architektur. Möglicherweise müssen Sie auch den Besitz des Ordners ändern (z. B. chown -R mysql:mysql /var/lib/mysql/dbname)

Beachten Sie, dass Berechtigungen ( GRANTusw.) Teil der mysqlDatenbank sind. Sie werden also nicht zusammen mit den Tabellen wiederhergestellt. Möglicherweise müssen Sie die entsprechenden GRANTAnweisungen ausführen , um Benutzer zu erstellen, Zugriff zu gewähren usw. (Das Wiederherstellen der mysqlDatenbank ist möglich, Sie müssen jedoch mit MySQL-Versionen und allen erforderlichen Ausführungen des mysql_upgradeDienstprogramms vorsichtig sein .)

Eigentlich brauchen Sie wahrscheinlich nur .FRM (Tabellenstruktur) und .MYD (Tabellendaten), aber Sie müssen die Tabelle reparieren, um die .MYI (Indizes) neu zu erstellen.

Die einzige Einschränkung besteht darin, dass Sie beim Downgrade am besten die Versionshinweise überprüfen (und wahrscheinlich die Reparaturtabelle ausführen). Neuere MySQL-Versionen bieten natürlich Funktionen.

[Obwohl es offensichtlich sein sollte, wenn Sie Tabellen mischen und abgleichen, ist die Integrität der Beziehungen zwischen diesen Tabellen Ihr Problem. MySQL ist das egal, aber Ihre Anwendung und Ihre Benutzer können es. Außerdem funktioniert diese Methode für InnoDB-Tabellen überhaupt nicht. Nur MyISAM, aber angesichts der Dateien, die Sie haben, haben Sie MyISAM]

derobert
quelle
Würde dies wirklich funktionieren, ohne die entsprechenden Einträge zur Tabelle information_schema hinzuzufügen? Ich meine, MySQL muss wissen, um nach diesen Dateien zu suchen, oder?
Zenshai
4
Die information_schema-Tabellen sind nicht vorhanden, sondern nur Ansichten im internen Datenbankstatus. Siehe dev.mysql.com/doc/refman/5.0/en/information-schema.html
brian-brazil
4
Wow, ich fühlte mich schmutzig, aber das Löschen des gesamten Verzeichnisses von einer meiner Meinung nach MySQL4-Installation in MySQL5.1 hat die Tabellen auf magische Weise neu erstellt. Kein Neustart oder irgendetwas (unter Windows).
Dave
4
Es funktioniert, Sie müssen sich nur daran erinnern, um (für jede Tabelle) check table sometable; auszuführen : und dann die Reparatur auszuführen (nur bei Bedarf): repair table sometable;
Nux
3
Das hat super geklappt! Ich hatte die Dateien eingerichtet, aber mysql "sah" sie erst, als ich den Besitzer in "mysql: mysql" wechselte.
Sean.boyer
26

Beachten Sie, dass, wenn Sie die MYI-Datei neu erstellen möchten, REPAIR TABLE korrekt verwendet wird:

REPAIR TABLE sometable USE_FRM;

Andernfalls erhalten Sie wahrscheinlich nur einen weiteren Fehler.

mcardellg
quelle
24

Ich habe gerade eine Lösung dafür gefunden. Ich verwende MySQL 5.1 oder 5.6 unter Windows 7.

  1. Kopieren Sie die .frm- Datei und ibdata1 aus der alten Datei, die sich unter "C: \ Programme \ MySQL \ MSQLServer5.1 \ Data" befand.
  2. Stoppen Sie die SQL Server-Instanz in der aktuellen SQL-Instanz
  3. Wechseln Sie in den Datenordner unter "C: \ Programme \ MySQL \ MSQLServer5.1 \ Data".
  4. Fügen Sie die ibdata1 und den Ordner Ihrer Datenbank ein, der die .frm- Datei aus der Datei enthält, die Sie wiederherstellen möchten.
  5. Starten Sie die MySQL-Instanz.

Für diese Wiederherstellung müssen Sie die Dateien .MYI und .MYD nicht suchen.

Alnel
quelle
Befolgen Sie diese Schritte (nachdem alles andere fehlgeschlagen war) und verwenden Sie das innodb_force_recovery = 4Level (nicht sicher, ob dies in diesem Fall erforderlich war). Gott sei Dank!
Joshua Stewardson
6
Zu Ihrer Information: ibdata1ist InnoDB, nicht MyISAM.
Derobert
14

Eines ist zu beachten:

Die .FRM-Datei enthält Ihre Tabellenstruktur und ist spezifisch für Ihre MySQL-Version.

Die .MYD-Datei ist NICHT versionsspezifisch, zumindest nicht für kleinere Versionen.

Die .MYI-Datei ist spezifisch, kann jedoch weggelassen und neu generiert werden, REPAIR TABLEwie in den anderen Antworten angegeben.

Mit dieser Antwort möchten wir Sie darüber informieren, dass Sie mit einem Schema-Dump Ihrer Tabellen die Tabellenstruktur generieren, diese .MYD-Dateien durch Ihre Sicherungen ersetzen, die MYI-Dateien löschen und reparieren können alles. Auf diese Weise können Sie Ihre Backups auf eine andere MySQL-Version zurücksetzen oder Ihre Datenbank ganz ohne Verwendung verschieben mysqldump. Ich fand das super hilfreich beim Verschieben großer Datenbanken.

Brent
quelle
14

Einfach! Erstellen Sie eine Dummy-Datenbank (sagen wir abc)

Kopieren Sie alle diese .myd-, .myi- und .frm-Dateien nach mysql \ data \ abc, wobei mysql \ data \ der Ort ist, an dem .myd, .myi, .frm für alle Datenbanken gespeichert sind.

Gehen Sie dann zu phpMyadmin, gehen Sie zu db abc und Sie finden Ihre Datenbank.

Vishal
quelle
die kürzeste und präzise Antwort
Serak Shiferaw
Der beste Weg, um die Daten wiederherzustellen ... Ich habe WAMP installiert, dann eine neue Datenbank erstellt und Dateien in das neue Datenbankverzeichnis C: \ WAMP64 \ bin \ mysql \ mysqlxx \ data \ newdatabase kopiert. Öffnen Sie phpmyadmin und Ihre neue Datenbank siehe die Daten
Alexandre George
7

Ich denke .myi können Sie aus MySQL reparieren.

Wenn Sie diese Art von Fehlermeldungen von MySQL sehen: Datenbank konnte Abfrage (Abfrage) nicht ausführen 1016: Datei kann nicht geöffnet werden: 'sometable.MYI'. (errno: 145) Fehlermeldung: 1034: Falsche Schlüsseldatei für Tabelle: 'sometable'. Versuchen Sie es zu reparieren, wenn Sie wahrscheinlich eine abgestürzte oder beschädigte Tabelle haben.

Sie können die Tabelle über eine MySQL-Eingabeaufforderung wie folgt überprüfen und reparieren:

check table sometable;
+------------------+-------+----------+----------------------------+
| Table | Op | Msg_type | Msg_text | 
+------------------+-------+----------+----------------------------+ 
| yourdb.sometable | check | warning | Table is marked as crashed | 
| yourdb.sometable | check | status | OK | 
+------------------+-------+----------+----------------------------+ 

repair table sometable;
+------------------+--------+----------+----------+ 
| Table | Op | Msg_type | Msg_text | 
+------------------+--------+----------+----------+ 
| yourdb.sometable | repair | status | OK | 
+------------------+--------+----------+----------+

und jetzt sollte dein Tisch in Ordnung sein:

check table sometable;
+------------------+-------+----------+----------+ 
| Table | Op | Msg_type | Msg_text |
+------------------+-------+----------+----------+ 
| yourdb.sometable | check | status | OK |
+------------------+-------+----------+----------+
Elzo Valugi
quelle
6

Ich habe eine Lösung zum Konvertieren der Dateien in eine .sqlDatei gefunden (Sie können die .sqlDatei dann auf einen Server importieren und die Datenbank wiederherstellen), ohne auf das /varVerzeichnis zugreifen zu müssen. Daher müssen Sie auch kein Serveradministrator sein, um dies zu tun.

Auf Ihrem Computer muss XAMPP oder MAMP installiert sein.

  • Navigieren Sie nach der Installation von XAMPP zum Installationsverzeichnis (normalerweise C:\XAMPP) und zum Unterverzeichnis mysql\data. Der vollständige Pfad sollte seinC:\XAMPP\mysql\data
  • Im Inneren sehen Sie Ordner aller anderen von Ihnen erstellten Datenbanken. Einfügen Kopieren und den Ordner voll .myd, .myiund .frmDateien in es. Der Pfad zu diesem Ordner sollte sein

    C:\XAMPP\mysql\data\foldername\.mydfiles

  • Dann besuchen Sie localhost/phpmyadminin einem Browser. Wählen Sie die Datenbank aus, die Sie gerade in den mysql\dataOrdner eingefügt haben , und klicken Sie in der Navigationsleiste auf Exportieren. Wählt den Export als .sqlDatei. Daraufhin wird gefragt, wo die Datei gespeichert werden soll

Und das ist alles! Sie (sollten) haben jetzt eine .sqlDatei mit der Datenbank , die ursprünglich war .myd, .myiund .frmDateien. Sie können es dann über phpMyAdmin auf einen anderen Server importieren, indem Sie eine neue Datenbank erstellen, in der Navigationsleiste auf "Importieren" klicken und dann die Schritte zum Importieren ausführen

Kaspar Lee
quelle
5

Sie können die Dateien in ein entsprechend benanntes Unterverzeichnis des Datenordners kopieren, sofern es sich um genau dieselbe Version von mySQL handelt und Sie alle zugehörigen Dateien in diesem Verzeichnis beibehalten haben. Wenn Sie nicht alle Dateien haben, sind Sie sich ziemlich sicher, dass Sie Probleme haben werden.

cgp
quelle
Was mache ich, wenn ich nicht genau dieselbe Version von MySQL habe?
Jo Sprague
2

Die obige Beschreibung reichte nicht aus, um die Dinge für mich zum Laufen zu bringen (wahrscheinlich dicht oder faul), also habe ich dieses Skript erstellt, sobald ich die Antwort gefunden habe, um mir in Zukunft zu helfen. Hoffe es hilft anderen

vim fixperms.sh 

#!/bin/sh
for D in `find . -type d`
do
        echo $D;
        chown -R mysql:mysql $D;
        chmod -R 660 $D;
        chown mysql:mysql $D;
        chmod 700 $D;
done
echo Dont forget to restart mysql: /etc/init.d/mysqld restart;
dny238
quelle
-2

Für Benutzer mit Windows XP und installiertem MySQL Server 5.5 lautet der Speicherort für die Datenbank C: \ Dokumente und Einstellungen \ Alle Benutzer \ Anwendungsdaten \ MySQL \ MySQL Server 5.5 \ data, es sei denn, Sie haben den Speicherort in der MySql Workbench-Installation geändert GUI.

Dämon
quelle
3
Die Frage bezieht sich auf die Wiederherstellung von bestimmten Dateitypen, nicht darauf, wo sich diese Dateien unter Windows XP MySQL 5.5 befinden.
Danpe