• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Backup und Recovery von MySQL

homer65

Hacker
Hallo Leute,
ich interessiere mich für Backup und Recovery Verfahren für MySQL. Ich weiss, dieses Thema ist hier schon mal diskuttiert worden, aber ich würde es gerne ausführlicher besprochen haben.
Zum einen würde ich gerne zu jedem Backupverfahren auch wissen, wie man die daten wieder zurücklädt. Wichtig ist mir, ob der Backup online, das heißt ohne die Datenbank runterzufahren geht, oder nur offline. Kann man aus einer kompletten Sicherung auch nur einzelne Teile (Tabellen) wieder zurückladen? Ist eine Point in Time Recovery, das heißt ein Zurückladen auf einen bestimmten Zeitpunkt, möglich, oder kann man nur auf den Stand der Sicherung zurück?
Bitte um viele kompetente Hinweise.
Christian
 

whois

Ultimate Guru
Hi

Das geht mit SQL Dump.

Stichworte und ein SQL Buchg findest du hier im Forum, du kannst dir unter anderem auch den Link ansehen.

http://www.linux-club.de/viewtopic.php?t=52452
 
OP
H

homer65

Hacker
Hallo,
habe mir mysqldump mal ein wenig angesehen. Aber ich habe dazu noch ein paar Fragen. Mit mysqldump macht man soweit ich es verstanden habe eine Onlinesicherung einer einzelnen Datenbank. Für eine große Datenbank wird die Sicherung sicherlich einige Zeit dauern, um mal ein Beispiel zu nennen, sagen wir mal die Sicherung dauert 5 Minuten. Was ist nun, wenn in dieser Zeit von anderen Benutzern Änderungen an der Datenbank gemacht werden. Geht das überhaupt? Und wenn ja, welchen Stand sichert mysqldump dann? Ist es der Stand vor diesen Änderungen, oder danach, oder fließt in die Sicherung ein Teil der Updates, ein ein anderer Teil nicht?
Und nun zum Recovern der Datenbank. Muß ich immer die komplette Datenbank zurückladen, oder kann ich auch nur Teile, sagen wir mal eine einzelne Tabelle zurückladen? Und wenn ja wie? Auf soetwas wie eine Point in Time Recovery habe ich auch keine Hinweise gefunden. Geht soetwas mit mysqldump?
Christian
 

Kurt M

Hacker
Hallo Christian,

die folgende Zeile macht das Backup auf meinem Server, die Nachts um 4 als Cronjob aufgerufen wird:
Code:
mysqldump --host=192.168.0.2 --opt -A | bzip2 --best > /MySql_Backup/mysqlbackup_`date +"%d%m%y"`.bz2

Es wird eine (gepackte) Textdatei (Script) erstellt, die man mit jedem Texteditor ansehen kann.
mysqldump erstellt ein Script, welches die kompletten SQL Kommandos enthält um die Datenbank wiederherzustellen, so als würde man alles per Hand eingeben.
Das ganze ist ein enormer Vorteil. Dadurch dass man in diese Textdatei eingreifen kann, ist es zB problemlos möglich eine gewünschte Tabelle herauszukopieren und nur diese wieder herzustellen. Alle Möglichkeiten sind offen, es gibt keine "geheimen" Binärdateien, alles ist lesbar.

Während der Backup läuft kann auf die Datenbank nicht zugegriffen werden, das Backup macht ein LOCK.
Allerdings dauert das ganze nur sehr kurz, zumindest bei meinen Datenbanken. Diese sind zusammen im Moment 7 MB groß und das mysqldump dauert (P-4 2,8 GHz) gerade mal 8 Sekunden.
 

panamajo

Guru
homer65 schrieb:
habe mir mysqldump mal ein wenig angesehen. Aber ich habe dazu noch ein paar Fragen. Mit mysqldump macht man soweit ich es verstanden habe eine Onlinesicherung einer einzelnen Datenbank.

"Online" und Datenbanken? Du meinst sowas wie "Zustand zum Zeitpunkt x"

homer65 schrieb:
Für eine große Datenbank wird die Sicherung sicherlich einige Zeit dauern, um mal ein Beispiel zu nennen, sagen wir mal die Sicherung dauert 5 Minuten. Was ist nun, wenn in dieser Zeit von anderen Benutzern Änderungen an der Datenbank gemacht werden. Geht das überhaupt? Und wenn ja, welchen Stand sichert mysqldump dann? Ist es der Stand vor diesen Änderungen, oder danach, oder fließt in die Sicherung ein Teil der Updates, ein ein anderer Teil nicht?

Kommt darauf an :p
Die genannten Kollisionen und Quellen von inkonsistenzen lassen sich umschiffen.

homer65 schrieb:
Und nun zum Recovern der Datenbank. Muß ich immer die komplette Datenbank zurückladen, oder kann ich auch nur Teile, sagen wir mal eine einzelne Tabelle zurückladen? Und wenn ja wie?

Wenn du einen kompletten Dump aller DBs hast dann kannst du einspielen was du willst, bis auf einzelne Felder.
Wenn du regelmäßig von bestimmten DBs bestimmte tabellen oder Felder als Backup benötigst dann kannst du dafür sorgen entsprechende Sicherungen zu haben.

homer65 schrieb:
Auf soetwas wie eine Point in Time Recovery habe ich auch keine Hinweise gefunden.
Christian
http://dev.mysql.com/doc/refman/5.0/en/point-in-time-recovery.html

War der erste Hit wenn man in der Suche "recovery" eingibt, also nicht wirklich schwer zu finden, ich empfehle dort weiterzulesen...
 
OP
H

homer65

Hacker
Vielen Dank für eure Antworten. Ich glaube damit komme ich im Verständnis von Sicherung und Restore weiter.
Christian
 
OP
H

homer65

Hacker
Hallo Leute,
ich habe ein kleines Java Programm geschrieben, das einem Backup und Recovery mittels mysqldump vereinfacht. Wen sich jemand dafür interessiert:
http://www.christian-ehm.de
 
Oben