Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

[SOLVED] Inkrementell Sicherung der MySQL Datenbank

Alles rund um die Systemverwaltung, die Administration und Konfiguration Eures Linuxsystems

Moderator: Moderatoren

Antworten
mr_kaktus
Member
Member
Beiträge: 59
Registriert: 3. Feb 2006, 10:44

[SOLVED] Inkrementell Sicherung der MySQL Datenbank

Beitrag von mr_kaktus » 12. Feb 2007, 16:39

Hi @all

ich hab mir ein kleines Skript geschrieben, der mir mit mysqldump und hilfe des Crond die MySQL Datenbank jeden abend Vollständig sichert. Nach einer bestimmten Zeit lösche ich ich die Alten Sicherungen weg, damit das System nicht voll läuft.
Jetzt wollte ich mal in die Runde fragen, gibt es schon fertige Skripte mit denen man die MySQL Datenbank Automatisch Inkrementell jedenabend sichern kann? Ich hab schon im Forum und im netzt gesucht, aber ich hab nicht genau das gefunden, was ich gesucht habe.
Vielleicht hat mir jemand ein Tipp?
Zuletzt geändert von mr_kaktus am 16. Feb 2007, 12:03, insgesamt 1-mal geändert.
by mr_kaktus

Werbung:
abgdf
Guru
Guru
Beiträge: 3073
Registriert: 13. Apr 2004, 21:15

Beitrag von abgdf » 12. Feb 2007, 23:09

Was genau meinst Du mit "inkrementell" ?

Viele Grüße

mr_kaktus
Member
Member
Beiträge: 59
Registriert: 3. Feb 2006, 10:44

Beitrag von mr_kaktus » 13. Feb 2007, 09:19

Ich meine, dass nur dann ein Backup gemacht wird, wenn sich was in der Datenbank geändert hat. Aber wahrscheinlich kann man in MySQL kein richtiges Inkrementel backup machen oder, also sprich nur die Änderungen sichern. :?:
by mr_kaktus

Benutzeravatar
homer65
Hacker
Hacker
Beiträge: 331
Registriert: 6. Jan 2005, 05:24
Wohnort: Bochum

Beitrag von homer65 » 13. Feb 2007, 11:32

Ein inkrementellen Backup gibt es nicht für MySQL. Ich habe aber mal ein Java Programm geschrieben, das einem die Sicherung erleichert:
http://mysql-backup.sourceforge.net

mr_kaktus
Member
Member
Beiträge: 59
Registriert: 3. Feb 2006, 10:44

Beitrag von mr_kaktus » 13. Feb 2007, 11:56

Hey, danke für den Link ist echt super ! :D
Werde ich gleich mal austesten
by mr_kaktus

Benutzeravatar
whois
Administrator
Administrator
Beiträge: 16599
Registriert: 11. Okt 2004, 08:50
Wohnort: Aachen
Kontaktdaten:

Beitrag von whois » 13. Feb 2007, 13:17

Hi homer

Ich brauch dein Programm schon eine ganze Zeit und wollte endlich mal Danke sagen. :)

cu

Benutzeravatar
homer65
Hacker
Hacker
Beiträge: 331
Registriert: 6. Jan 2005, 05:24
Wohnort: Bochum

Beitrag von homer65 » 13. Feb 2007, 17:22

Oh schick, noch jemand der das Programm benutzt :-). Habe bisher noch überhaupt keine Rückmeldung erhalten. Von Sourceforge her hört man rein gar nichts :-(.

Blackscreen
Member
Member
Beiträge: 123
Registriert: 6. Mai 2006, 20:27

Beitrag von Blackscreen » 13. Feb 2007, 17:42

@kaktus: Um inkrementell zu sichern sollte es doch reichen die Logfiles zu sichern (zumindest was da neu dazukam seit der letzten Sicherung). Alle paar Tage solltest du aber komplett sichern ;)

@homer: Ist dein Programm nur ein nettes Frontend für mysql-dump mit einer "rotate" Funktion oder kann das mehr (bin aus der Sourceforge Beschreibung nicht schlau geworden)?

Benutzeravatar
framp
Moderator
Moderator
Beiträge: 4247
Registriert: 6. Jun 2004, 20:57
Wohnort: bei Stuttgart
Kontaktdaten:

Beitrag von framp » 13. Feb 2007, 19:01

Multipost http://www.linuxforen.de/forums/showthr ... ost1499302

[EDIT] Nachfolgend hatte sich eine OT Diskussion bzgl Multiposting ergeben. Sie wurde der Übersichtlichkeit dieses Threads wegen nach Rücksprache mit den ThreadAuthor gelöscht. Anläßlich dieser Diskussion habe ich mal hier einen separaten Thread zu Multiposting erstellt.[/EDIT]
Zuletzt geändert von framp am 18. Feb 2007, 23:22, insgesamt 2-mal geändert.

Benutzeravatar
homer65
Hacker
Hacker
Beiträge: 331
Registriert: 6. Jan 2005, 05:24
Wohnort: Bochum

Beitrag von homer65 » 13. Feb 2007, 22:01

Das Progamm ist tatsächlich nur ein FrontEnd für mysqldump und kann nicht mehr als man auch manuell mit mysqldump könnte. Es erleichert nur ein wenig die Arbeit.

mr_kaktus
Member
Member
Beiträge: 59
Registriert: 3. Feb 2006, 10:44

Beitrag von mr_kaktus » 16. Feb 2007, 12:03

Hallo, bin schon früher fertig geworten, schaut euch das mal an.
Vielleicht könnt Ihr das mal selbst gebrauchen. Ich danke euch aufjedenfall für die Hilfe und Unterstützung.
Über Kritik und Feedback freue ich mich immer!

Code: Alles auswählen

#!/usr/bin/perl 

use strict;
use Date::Calc qw(:all);		# Calender Modul
use Digest::MD5;			# md5sum Modul


# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Globale Variablen ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
my $backupdir="MySQL_BACKUP";		# Backupverzeichnis
my $backupname="mysqldump_";		# anfang des Backupnamen
my @dumps=<$backupdir/$backupname*>;    # Alle Backupnamen
my $anzahl_dumps=@dumps;                # Anzahl der Backups
my $anzahl_grenze="7";                  # Anzahl der MySQLBackups generationen


# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ HAUPT PROGRAMM ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

# ================= #
# MySQL Dump ziehen #
# ================= #
&mysqldump; 				# aktueller DBump ziehen  
			
# ================ #
# Variablen Setzen #					
# ================ #	
my $NewFileDate=&SearchMaxDate; 	# aktuellster DateiDatum 	
my $OldFileDate=&SearchUnderMaxDate;	# vorletzter DateiDatum 
my $MD5_OldFile=&GetFingerPrint("$backupdir/$backupname$OldFileDate");	# md5sum der vorletzen Sicherung
my $MD5_NewFile=&GetFingerPrint("$backupdir/$backupname$NewFileDate");  # md5sum der letzten Sicherung

# ================================ #
# Pruefen ob ein Backup noetig ist #
# ================================ #
# Test ob die zupruefende Datei schon vorhanden ist. 
# Falls dem so ist, braucht man kein check durchzurfuehren,
# Da es sich um ein Aktuelles Update handelt.
# Das ist sinnvoll, wenn das Skript mehrmals am Tag ausgefuert wird.
if ("$NewFileDate" ne "$OldFileDate"){ 
  # Test ob die Checksummen des letzen und Aktuellen DBdump gleich sind.
  # Wenn Sie gleich sind, wird der Neue DBdump geloescht, 
  # da es keine Aenderugen gegeben hat.
  if ("$MD5_OldFile" eq "$MD5_NewFile"){
    # print "KEIN BACKUP noetig\n"; 	# Zu Test Zwecken
    unlink "$backupdir/$backupname$NewFileDate";
  }
}

# ===================== #
# Alte Backups loeschen #
# ===================== #
# In $anzahl stehen die Anzahl der MySQLBackups drin. 
# Die Schleife wird so lange durch laufen bis alle 
# alten Backups geloesch wurden. Die Anzahl der MySQLBackups generationen
# wird ueber die Variable $anzahl_grenze bestimmt. 
while ($anzahl_dumps > $anzahl_grenze) {
   my $min_date=&SearchMinDate;  			# alteste Datum der gesicherten Dateien
   unlink "$backupdir/$backupname$min_date";		# alte Backupdateien loeschen
   #print "$backupdir/$backupname$min_date geloesch"; 	# Zu Test zwecken
   #print " ==> $anzahl_dumps <== \n";			# Zu Test zwecken
   $anzahl_dumps--;					# Die Anzahl der Dumps immer um eins minimiren
}

# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FUNKTIONEN ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

# ================================= #
# Berechnet die md5sum einer Datei  #
# ================================= #
sub GetFingerPrint {
  my $filename="$_[0]"; 
  open (FILE, $filename)  or die "Kann $filename nicht oeffnen: $!";
  binmode(FILE);
  my $md5 = Digest::MD5->new;

  while(<FILE>){
    $md5->add($_);
  }
  close (FILE);
  my $fingerPrint = $md5->hexdigest;

return $fingerPrint;
}

# ============================================== #
# Dump der MySQL Daten bank mit mysqldump ziehen #
# ============================================== #
sub mysqldump{
  if (! -d $backupdir){mkdir $backupdir, 0700 or warn "Kann das Verzeichnis $backupdir nicht anlegen: $!"};
  my ($year,$month,$day)=Today_and_Now(); 
  my $datetoday=sprintf "%02d%02d%02d",($year%100),$month,$day;
  my $password="xxx";
  `mysqldump -A -u root -p$password --lock-all-tables > $backupdir/$backupname$datetoday`;
}

# ========================================================================= #
# Sucht sich anhand des Dateinamen (Datum) die zuletzt gesicherte Datei     # 
# ========================================================================= #
sub SearchMaxDate{
  my @dumps = <$backupdir/$backupname*>;
  my $max_date=shift @dumps;
     $max_date=substr("$max_date",-6);

  foreach(@dumps){
    my $datum=substr("$_",-6);
    if ($datum > $max_date ){
       $max_date = $datum;
    }
  }
  return $max_date;
}

# ========================================================================= #
# Such anhand des Dateinamen (Datum) die vorletzte MySQL Sicherung          #
# ========================================================================= #
sub SearchUnderMaxDate{
  my $max_date=&SearchMaxDate;
  my @dumps = <$backupdir/$backupname*>;
  my $min_date=shift @dumps;
     $min_date=substr("$min_date",-6);

  foreach(@dumps){
    my $datum=substr("$_",-6);
    if ($datum < $max_date && $datum >= $min_date){
       $min_date = $datum;
    }
  }
  return $min_date;
}

# ========================================================================== #
# Sucht sich anhand des Dateinamen (Datum) die aelteste gesicherte Datei aus #
# ========================================================================== #
sub SearchMinDate{
  my @dumps = <$backupdir/$backupname*>; 
  my $min_date=shift @dumps;	         
     $min_date=substr("$min_date",-6);

  foreach(@dumps){
    my $datum=substr("$_",-6);
    if ($datum <= $min_date ){
       $min_date = $datum;
    }
  }
  return $min_date;
}
by mr_kaktus

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste