Datenbank Dateien transferieren – IBD und FRM Dateien von InnoDB ohne ibdata1 wiederherstellen

Datenbank Transfer

In diesem Artikel soll es um das schnelle Transferieren von Datenbanken Tabellen gehen. Sicher kennt der eine oder anderen Anwender mysqldumper oder das Dumpen via Commandline. Bei größeren Datenmengen bietet sich allerdings der direkte Transfer der Dateien aus dem Filesystem an. Auch wenn automatische Backups gemacht werden (aka Schattenkopien) sind dann auch häufig .ibd und .frm Dateien vorzufinden.

Wenn das normale Einspielen dieser Dateien nicht funktioniert, fehlt vermutlich die ibdata1 Datei oder ist nicht mehr aktuell.

Hier die Vorgehensweise für ein Restore einer Tabelle (table_name) über SSH und mysql:

  1. Auf dem Server dbsake installieren: curl -s http://get.dbsake.net > dbsake; chmod u+x dbsake
  2. Struktur der Tabelle auslesen: ./dbsake frmdump /tmp/table_name.frm
  3. Den generierten CREATE TABLE Befehl in der Datenbank ausführen, dabei noch ROW_FORMAT=compact ans Ende vor dem Semikolon hinzufügen.
  4. Die Datenbank mit leerem Tablespace wurde nun erstellt. Den Tablespace nun komplett löschen mit dem folgenden Befehl: ALTER TABLE table_name DISCARD TABLESPACE
  5. Nun die einzuspielende table_name.ibd Datei in das Verzeichnis der Datenbank kopieren (meist /var/lib/mysql/dbname/) und über folgenden Befehl importieren: ALTER TABLE table_name IMPORT TABLESPACE
  6. Danach ggf. den MySQL-Server mit service mysql restart neustarten und die Datenbank überprüfen. Fertig.

Nützliche Links:

https://dba.stackexchange.com/questions/16875/restore-table-from-frm-and-ibd-file

https://superuser.com/questions/675445/mysql-innodb-lost-tables-but-files-exist

https://stackoverflow.com/questions/15694168/error-tablespace-for-table-xxx-exists-please-discard-the-tablespace-before-imp

https://stackoverflow.com/questions/2222583/what-if-i-delete-ibdata1-in-mysql-linux

Wie immer gilt, zuvor ein Backup anzulegen bevor man an den Dateien arbeitet. Wir übernehmen keine Haftung/Gewähr für o.g. Prozeduren. Für Hinweise, Tipps und Fragen gerne die Kommentarfunktion nutzen 😉