Wiederherstellen der MySQL-Datenbank aus physischen Dateien

139

Ist es möglich, eine MySQL-Datenbank aus den physischen Datenbankdateien wiederherzustellen? Ich habe ein Verzeichnis mit den folgenden Dateitypen:

client.frm
client.MYD
client.MYI

aber für etwa 20 weitere Tische.

Normalerweise verwende ich mysqldump oder ein ähnliches Tool, um alles in einer SQL-Datei abzurufen. Wie gehe ich also mit diesen Dateitypen um?

Abdullah Jibaly
quelle
Ich habe das gleiche Problem: mehrere Dateien mit den Erweiterungen FRM, MYD und MYI. Ich habe auch Dateien ib_logfile0, ib_logfile1 und ibdata1. Ich kann nicht auf einen laufenden Server zugreifen oder einen Speicherauszug erstellen. Ich habe versucht, einen neuen MySQL-Server zu betreiben und die Dateien zu verwenden, aber ich habe es nicht geschafft ... Hat jemand eine klare Anleitung?
flo5783

Antworten:

132

Eine MySQL MyISAM-Tabelle ist die Kombination von drei Dateien:

  • Die FRM-Datei ist die Tabellendefinition.
  • In der MYD-Datei werden die tatsächlichen Daten gespeichert.
  • In der MYI-Datei werden die in der Tabelle erstellten Indizes gespeichert.

Sie sollten in der Lage sein, wiederherzustellen, indem Sie sie in Ihren Datenbankordner kopieren (unter Linux ist der Standardspeicherort /var/lib/mysql/)

Sie sollten dies tun, während der Server nicht ausgeführt wird.

Vincent
quelle
64
Dies gilt nur für MyISAM-Tabellen. InnoDB speichert seine Tabellen und Indizes in einem einzigen Tabellenbereich *, der standardmäßig aus den drei Dateien ibdata1, ib_logfile0 und ib_logfile1 besteht. Zum Wiederherstellen einer Datenbank benötigen Sie auch diese Dateien. * Tabellenbereiche pro Tabelle sind möglich, aber nicht standardmäßig
ax.
21
Er sagt, er habe .frm .myi- und .myd-Dateien. Ich nahm dann an, dass es MyISAM-Tabellen waren.
Vincent
5
Wertvolle Antwort, aber ich musste noch einen Schritt weiter gehen, damit alles gut funktioniert: Da ich mich als Root anmelden musste, um die Dateien wiederherzustellen, konnte der mysqlBenutzer, der den mysqldProzess ausführte, nicht darauf zugreifen. Das Erstellen eines chmod -R mysql:mysql .MySQL-Datenverzeichnisses ist schnell und einfach, aber vorher herauszufinden, warum alle meine resoterd DBs keine Tabellen zu haben schienen, dauerte etwas länger.
Edurne Pascual
10
herenvardo Ich denke, Sie meinten chown nicht chmod
Oliver M Grech
2
Um einige der wichtigen Hinweise zusammenzufassen, müssen Sie möglicherweise die folgenden chownDateien kopieren:sudo chown -R mysql:mysql /var/lib/mysql
Jacksonkr
50

Nach der Antwort von @Vicent stelle ich die MySQL-Datenbank bereits wie folgt wieder her:

Schritt 1. Fahren Sie den MySQL-Server herunter

Schritt 2. Kopieren Sie die Datenbank in Ihren Datenbankordner (unter Linux ist der Standardspeicherort / var / lib / mysql). Behalten Sie den gleichen Namen der Datenbank und den gleichen Namen der Datenbank im MySQL-Modus.

sudo cp -rf   /mnt/ubuntu_426/var/lib/mysql/database1 /var/lib/mysql/

Schritt 3: Ändern Sie Ihren eigenen und ändern Sie den Modus des Ordners:

sudo chown -R mysql:mysql /var/lib/mysql/database1
sudo chmod -R 660 /var/lib/mysql/database1
sudo chown  mysql:mysql /var/lib/mysql/database1 
sudo chmod 700 /var/lib/mysql/database1

Schritt 4: Kopieren Sie ibdata1 in Ihren Datenbankordner

sudo cp /mnt/ubuntu_426/var/lib/mysql/ibdata1 /var/lib/mysql/

sudo chown mysql:mysql /var/lib/mysql/ibdata1

Schritt 5: Kopieren Sie die Dateien ib_logfile0 und ib_logfile1 in Ihren Datenbankordner.

sudo cp /mnt/ubuntu_426/var/lib/mysql/ib_logfile0 /var/lib/mysql/

sudo cp /mnt/ubuntu_426/var/lib/mysql/ib_logfile1 /var/lib/mysql/

Denken Sie daran, die eigenen zu ändern und das Stammverzeichnis dieser Dateien zu ändern:

sudo chown -R mysql:mysql /var/lib/mysql/ib_logfile0

sudo chown -R mysql:mysql /var/lib/mysql/ib_logfile1

oder

sudo chown -R mysql:mysql /var/lib/mysql

Schritt 6 (Optional): Meine Site ist so konfiguriert, dass Dateien an einem bestimmten Speicherort gespeichert werden. Anschließend kopiere ich diese genau an den entsprechenden Speicherort.

Schritt 7: Starten Sie Ihren MySQL-Server. Alles kommt zurück und genießt es.

Das ist es.

Weitere Informationen finden Sie unter: https://biolinh.wordpress.com/2017/04/01/restoring-mysql-database-from-physical-files-debianubuntu/

Biolinh
quelle
4
+1 für detaillierte Schritt-für-Schritt-Anweisungen. Aber ich habe einige Aussagen bearbeitet, um wirklich zu reflektieren, was sie sein sollten.
Peter
Ich habe einen Fehler # 1932 erhalten und kann nicht auf Daten zugreifen. Die Datenbanken werden angezeigt, aber auf die Daten kann nicht zugegriffen werden. Ausführen von XAMPP 7.2.12 unter MAC OS X Mojave.
Steve1754a
@ Steve1754a Der Fehler kann aus vielen Gründen auftreten. 1. Verschieben Sie eine Datenbank von Mac OS nach Mac OS? 2. Bitte überprüfen Sie die Erlaubnis dieser Dateien / Daten / Tabelle
Biolinh
Antworten: 1. Ja; 2. Ich habe es getan. Ich musste meine DB komplett neu aufbauen. Konnte keine Lösung finden. Moral zur Geschichte: Erstellen Sie immer ein Backup der DB. Ich wünschte, es gäbe eine einfache Möglichkeit, dies automatisch in XAMPP zu tun.
Steve1754a
1
Du hast mein Leben gerettet
SpongePablo
8

Wenn Sie den Ordner wiederherstellen, vergessen Sie nicht, die Dateien in mysql: mysql zu zerlegen.

chown -R mysql:mysql /var/lib/mysql-data

Andernfalls werden Fehler angezeigt , wenn Sie versuchen, eine Datenbank zu löschen oder eine neue Spalte hinzuzufügen.

und starten Sie MySQL neu

service mysql restart
Joel Davey
quelle
2
Dies ist keine wirkliche Antwort auf die Frage, war aber sehr hilfreich.
Ryantuck
Eigentlich sollten Sie nicht alles zu MySQL chown, der MySQL-Datenbankordner sollte Stammgruppe behalten
Galvani
8

Ich habe das gleiche Problem, konnte die Datenbank jedoch aufgrund der obigen Anweisungen nicht erfolgreich wiederherstellen.

Ich konnte nur MySQL-Datenbankordner von meinem Ubuntu-Betriebssystem wiederherstellen. Mein Problem ist, wie ich meine Datenbank mit diesen unlesbaren MySQL-Datenordnern wiederherstellen kann. Also wechselte ich zurück zu Win7 OS für die Entwicklungsumgebung.

* HINWEIS Ich habe einen vorhandenen Datenbankserver in Win7 und benötige nur wenige Datenbankdateien, um sie aus den wiederhergestellten Dateien abzurufen. Um die Datenbankdateien erfolgreich von Ubuntu OS wiederherzustellen, muss ich den MySQL-Datenbankserver (dieselbe Version von Ubuntu OS in meinem Win7-Betriebssystem) neu installieren, um alles auf diesem alten Datenbankserver wiederherzustellen.

  1. Erstellen Sie aus den wiederhergestellten Dateien einen anderen neuen MySQL-Datenbankserver mit derselben Version.

  2. Stoppen Sie den MySQL-Server

  3. Kopieren Sie den wiederhergestellten Ordner und fügen Sie ihn in die MySQL-Datenbank (C: \ ProgramData \ MySQL \ MySQL Server 5.5 \ data) ein.

  4. Kopieren Sie die Datei ibdata1 im installierten Linux-Ordner mysql und fügen Sie sie ein (C: \ ProgramData \ MySQL \ MySQL Server 5.5 \ data). Überschreiben Sie einfach das vorhandene oder erstellen Sie ein Backup, bevor Sie es ersetzen.

  5. Starten Sie den MySQL-Server und überprüfen Sie, ob Sie die Datenbankdateien erfolgreich wiederhergestellt haben.

  6. Um die wiederhergestellte Datenbank auf meinem aktuell verwendeten MySQL-Server zu verwenden, exportieren Sie einfach die wiederhergestellte Datenbank und importieren Sie sie auf meinen vorhandenen MySQL-Server.

Hoffe das wird helfen, denn nichts anderes hat bei mir funktioniert.

Ivan Igniter
quelle
1
Die Methode funktioniert auch unter Ubuntu / Debian mit den Dateien ibdata1, ib_logfile0 und ib_logfile1 sowie dem Datenbankordner. Benutzer wird nicht kopiert, aber dann können Sie der Datenbank einen neuen Benutzer hinzufügen und damit sichern.
Bokorben
2

Mit MySql 5.1 (Win7). Um DBs (InnoDbs) neu zu erstellen, habe ich den gesamten Inhalt der folgenden Verzeichnisse (my.ini-Parameter) ersetzt:

datadir="C:/ProgramData/MySQL/MySQL Server 5.1/Data/"
innodb_data_home_dir="C:/MySQL Datafiles/"

Danach habe ich MySql Service gestartet und alles funktioniert gut.

sergey.olifirenko
quelle
1

Ja, so ist es! Fügen Sie sie einfach Ihrem Datenbankordner hinzu (abhängig vom Betriebssystem) und führen Sie einen Befehl wie "MySQL Fix Permissions" aus. Dadurch wurde die Datenbank neu gespeichert. Beachten Sie auch, dass die richtigen Berechtigungen auch für die Dateien festgelegt sind.

Filip Ekberg
quelle
Ich habe es getan, aber ich erkenne die Tabellen nicht. Wie ich in meinem Kommentar zur vorherigen Antwort sagte.
Orezvani
0

Ich habe diese Dateien einmal in den Datenbankspeicherordner für eine funktionierende MySQL-Datenbank kopiert, die Datenbank gestartet und darauf gewartet, dass sie die Dateien "repariert", und sie dann mit MySQLldump extrahiert.

Spikolynn
quelle
-1

In meinem Fall reichte es aus, das tc.log in / var / lib / mysql zu entfernen, um mariadb / mysql erneut zu starten.

Sir John Franklin
quelle
Dies ist kein Problem, wenn Sie den MySQL-Server starten / neu starten können.
Oluwatumbi