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]
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?
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.
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.
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.
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:
checktable sometable;+------------------+-------+----------+----------------------------+|Table| Op | Msg_type | Msg_text |+------------------+-------+----------+----------------------------+ | yourdb.sometable |check| warning |Tableis 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:
checktable sometable;+------------------+-------+----------+----------+ |Table| Op | Msg_type | Msg_text |+------------------+-------+----------+----------+ | yourdb.sometable |check| status | OK |+------------------+-------+----------+----------+
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
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.
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;
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.
Antworten:
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 (
GRANT
usw.) Teil dermysql
Datenbank sind. Sie werden also nicht zusammen mit den Tabellen wiederhergestellt. Möglicherweise müssen Sie die entsprechendenGRANT
Anweisungen ausführen , um Benutzer zu erstellen, Zugriff zu gewähren usw. (Das Wiederherstellen dermysql
Datenbank ist möglich, Sie müssen jedoch mit MySQL-Versionen und allen erforderlichen Ausführungen desmysql_upgrade
Dienstprogramms 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]
quelle
check table sometable;
auszuführen : und dann die Reparatur auszuführen (nur bei Bedarf):repair table sometable;
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.
quelle
Ich habe gerade eine Lösung dafür gefunden. Ich verwende MySQL 5.1 oder 5.6 unter Windows 7.
Für diese Wiederherstellung müssen Sie die Dateien .MYI und .MYD nicht suchen.
quelle
innodb_force_recovery = 4
Level (nicht sicher, ob dies in diesem Fall erforderlich war). Gott sei Dank!ibdata1
ist InnoDB, nicht MyISAM.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 TABLE
wie 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.quelle
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.
quelle
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:
und jetzt sollte dein Tisch in Ordnung sein:
quelle
Ich habe eine Lösung zum Konvertieren der Dateien in eine
.sql
Datei gefunden (Sie können die.sql
Datei dann auf einen Server importieren und die Datenbank wiederherstellen), ohne auf das/var
Verzeichnis 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.
C:\XAMPP
) und zum Unterverzeichnismysql\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
,.myi
und.frm
Dateien in es. Der Pfad zu diesem Ordner sollte seinC:\XAMPP\mysql\data\foldername\.mydfiles
Dann besuchen Sie
localhost/phpmyadmin
in einem Browser. Wählen Sie die Datenbank aus, die Sie gerade in denmysql\data
Ordner eingefügt haben , und klicken Sie in der Navigationsleiste auf Exportieren. Wählt den Export als.sql
Datei. Daraufhin wird gefragt, wo die Datei gespeichert werden sollUnd das ist alles! Sie (sollten) haben jetzt eine
.sql
Datei mit der Datenbank , die ursprünglich war.myd
,.myi
und.frm
Dateien. 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ührenquelle
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.
quelle
http://forums.devshed.com/mysql-help-4/mysql-installation-problems-197509.html
Es heißt, die ib_ * -Dateien umzubenennen. Ich habe es getan und es gab mir die Datenbank zurück.
quelle
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
quelle
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.
quelle