Backup / Restore InnoDB Datenbank

final

New Member
Hallo,

ich bin noch relativ neu dabei wenn es um Datenbanken geht, ich habe jetzt einen kleinen email Server aufgesetzt der die Mails in einer Datenbank speichert. Als Storage Engine habe ich InnoDB verwendet.

Wie schaffe ich es ein Backup der Datenbank zu erstellen ohne den Dienst zu beenden, und reicht es einen Dump auzuführen oder muss ich noch die InnoDB Dateien aus dem /var/lib/mysql verzeichnis mitsichern?.

MFG
final
 
Guten Abend,

Code:
mysqldump --all-databases --opt > backup.sql
sollte das können.


Grüße
 
Wenn man InnoDB einsetzt, weil man Transaktionen braucht, dann sollte man den Backup auch ein einer Transaktion zusammenfassen, indem man die Option --single-transaction nutzt (siehe MySQL-Doku).
Also besser so:
Code:
mysqldump --all-databases --single-transaction --skip-opt > backup.sql
Da --opt sich nicht mit --single-transaction verträgt, muß es explizit ausgeschaltet werden, denn es ist standardmäßig sowieso aktiv.
 
Hallo und Danke erstmal für eure Hilfe

Wenn der Dump jetzt erstellt wurde kann ich damit die Komplette Datenbank wieder herstellen oder? Die zweite Frage wäre wie man sowas macht. Muss ich bei einem Restore erst die Datenbank erstellen oder Funktioniert das über den Dump File?

Die Dateien aus dem Verzeichnis /var/lib/mysql ib_logfile0,ib_logfile1,ibdata1
muss ich nicht extra mitsichern oder?

MFG
final
 
Der oben genannte Befehl schreibt dir alle Datenbanken in eine Datei, mit der dann auch alles wieder hergestellt werden kann. Die Dateien aus /var/lib/mysql brauchst du nicht extra mit zu sichern.
Ich führe bei mir die Sicherung über ein kleines Bash-Script durch, welches für jede Datenbank ein eigenes Verzeichnis anlegt und darin für jede Tabelle eine eigene Datei. Ist allerdings nur bedingt für InnoDB geeignet, da nicht transaktionssicher (ich verwende nur MyISAM-Tabellen):
Code:
#!/bin/bash
export savepath='/var/lib/mysqldump'

export username='backup'
export password='password'

for a in `echo "show databases" | mysql -u$username -p$password | grep -v Database`;
 do
  mkdir -p $savepath/$a
  echo "Dumping database: $a"
  for i in `echo "show tables" | mysql -u$username -p$password $a| grep -v Tables_in_`;
   do
    echo " * Dumping table: $a - $i"
    mysqldump -q -a -c -u$username -p$password --allow-keywords $a $i | gzip > $savepath/$a/$i.sql.gz
   done
 done
echo "Size: " `du -hs $savepath`
Die echos sind rein informativ, damit ich besser zuordnen kann, wenn es mal zu einem Fehler kommt, wo dieser aufgetreten ist. Die drei Exports am Anfang setzen den Pfad, in den die Sicherung geschrieben wird sowie den verwendeten MySQL-User samt Kennwort. Und damit die Dumps nicht ganz soviel Platz wegnehmen, werden sich auch direkt mit gzip gepackt.
 
Werde dann mal versuchen dei Datenbank über den Dump Wiederherzustellen. Danke erstmal für eure Antworten ich werde kurz bescheid geben ob alles funktioniert hat.

MFG
final
 
Hallo

So habe es jetzt mal getestet hat leider nicht geklappt. Die Datenbank die ich dumpen und wiederherstllen möchste wird von einem Installationsscript angelegt es ist ein zarafa Mailserver.

Danach wollte ich das dump file zurückspielen, wenn ich das aber versuche bekomme ich die Meldung :

ERROR 1050 at line 27: Table `colums_priv´ already exists

Wie muss ich das genau machen wie gesagt die Datenbank wird vom Zarafa Installationsscript angelegt. Muss ich die angelegte datenbank dann erst löschen und das Dump File zurückspielen?

MFG
final
 
Wenn du --skip-opt verwendet hast, wird der Befehl zum Löschen nicht automatisch in de Dump geschrieben und somit muß die Löschung manuell erfolgen. Hat aber auch den Vorteil, daß man somit keine bereits vorhandenen Daten versehentlich mit einem alten Dump überschreibt.
Da --opt eine Sammel-Option ist, mußt du in der MySQL-Doku mal schauen, welche der einzelnen Optionen du weiterhin brauchst und mußt sie in den Befehl mit einbauen.
 
Last edited by a moderator:
So habe es jetzt hinbekommen funktioniert alles Wunderbar so wie es sein soll. Möchte mich an dieser Stelle nochmal für eure Hilfe bedanken.

MFG
final
 
Back
Top