Maresa P.: automatischer Backup auf FTP per CRON

Hallo liebes Forum,

ich besitze einen Linux Server (RedHat 9) und möchte eine MySQL Datenbank und einen Ordner (/var/backup/${DATUM}) mit biliebig vielen Unterordnern täglich auf einem anderem Sever sichern.

Die Datenübertragung von meinem Server zu dem anderen Server geschieeht mittels FTP. Die tägliche automatisierte Sicherung wird durch CRON erreicht, welches folgendes Shell Script ausführt:

#!/bin/sh
DATUM=date '+%Y-%m-%d'

mkdir /var/backup/${DATUM}
mysqldump -uUSERNAME -pPASSWORT -hlocalhost --opt DATENBANKNAME > /var/backup/${DATUM}/DATENBANKNAME.sql

cp -R /home/httpd/vhosts/host1/htdocs /var/backup/${DATUM}

ftp -n SERVER<<*eof
quot user USERNAME
quot pass PASSWORT
mkdir ${DATUM}
cd ${DATUM}

Hier fehlt nun der Befehl zum kopieren des _kompletten_ lokalen Verzeichnisses (/var/backup/${DATUM}) mit _allen_ Unterordnern

*eof

Mein Problem: Wie kopiere ich ein komplettes lokales Verzeichnis mit allen Unterordnern per FTP?
Mit PUT kann man ja nur einzelne Dateien kopieren?!

Vielen Dank für Euere Hilfe

Maresa P.

  1. Hallo,

    Mein Problem: Wie kopiere ich ein komplettes lokales Verzeichnis mit allen Unterordnern per FTP?

    Meiner Meinung nach solltest Du auf dem Ausgangsserver das komplette Verzeichnis taren (dann noch evtl. packen: gzip oder bzip2) und dann diesen einen Tarball mit ftp hochladen.

    Mit PUT kann man ja nur einzelne Dateien kopieren?!

    Es gibt mput bei einigen ftp-Programmen. Welches ftp-Programm benutzt Du?

    Eine andere Loesung waere rsync; damit wuerden nur Dateien gesichert, die sich geaendert haetten - allerdings ueberschreibt dass dann u.U. aeltere Sicherungen; Du muesstest Dich also in die rsync-Doku mal einlesen, soweit habe ich das nie gebraucht.

    Gruss
    Thomas

    1. Hallo,

      Hi Thomas!

      Meiner Meinung nach solltest Du auf dem Ausgangsserver das komplette Verzeichnis taren (dann noch evtl. packen: gzip oder bzip2) und dann diesen einen Tarball mit ftp hochladen.

      Vielen Dank für Deine Hilfe. Ich habe das mal so umgesetzt:

      ----------------------------------
      Datei 'backup', welche per CRON einmal täglich aufgerufen wird:

      #!/bin/sh

      Apache runterfahren

      service httpd stop

      Datums-String generieren

      DATUM=date '+%Y-%m-%d'

      Dump der Datenbank erstellen

      mysqldump -uUSERNAME -pPASSWORD -hlocalhost --opt DATENBANKNAME > /tmp/mt-db1.sql

      Tarball mit Files aus htdocs und DB Dump erstellen

      tar -cf /tmp/mt.tar /home/httpd/vhosts/mt/htdocs /tmp/mt-db1.sql

      Apache wieder starten

      service httpd start

      Tarball per FTP auf Backup-Server speichern

      ftp -n HOSTNAME<<*eof
      quot user USERNAME
      quot pass PASSWORD
      lcd /tmp
      put mt.tar
      rename mt.tar mt-${DATUM}.tar
      bye
      *eof

      loeschen des lokalen Tarballs und des MySQL Dumps

      rm -f mt-db1.sql
      rm -f mt.tar

      -----------------------------

      Das Script funktioniert super, der Dump wird erzeugt, der Tarball wird generiert und auch hochgeladen. Lade ich mir jedoch den tarball per FTP runter (GET tarballname.tar) und versuche in auszupacken, bekomme ich folgende Fehlermeldung:

      [root@host cron.daily]# tar -xf mt-2004-05-18.tar
      tar: Skipping to next header
      tar: Archive contains obsolescent base-64 headers
      tar: Error exit delayed from previous errors

      Fragen:

      • Woran kann das liegen? Was mache ich beim "verpacken" falsch?
      • Gibt es in meinem Script noch etwas zu verbessern?

      Vielen Dank!

      Maresa

      1. Hallo,

        rename mt.tar mt-${DATUM}.tar

        Hier eher ein mv; rename ist (zumindest bei mir) ein Perl-Skript.

        loeschen des lokalen Tarballs und des MySQL Dumps

        rm -f mt-db1.sql
        rm -f mt.tar

        Bist Du hier in /tmp? Ansonsten absolute Pfade.

        [root@host cron.daily]# tar -xf mt-2004-05-18.tar

        Was sagt "file mt-2004-05-18.tar"?

        Gruss
        Thomas

        1. Hallo,

          Hi!

          rename mt.tar mt-${DATUM}.tar
          Hier eher ein mv; rename ist (zumindest bei mir) ein Perl-Skript.

          rename ist das FTP Kommando, also hier durchaus richtig.

          loeschen des lokalen Tarballs und des MySQL Dumps

          rm -f mt-db1.sql
          rm -f mt.tar
          Bist Du hier in /tmp? Ansonsten absolute Pfade.

          hab die Pfade nun absolut angegeben. Die Dateien werden gelöscht.

          [root@host cron.daily]# tar -xf mt-2004-05-18.tar
          Was sagt "file mt-2004-05-18.tar"?

          mt-2004-05-18.tar: GNU tar archive

          Gruss
          Thomas

          lg
          Maresa

          1. Hallo,

            rename ist das FTP Kommando, also hier durchaus richtig.

            Tschuldigung, da hatte ich was verpeilt. Ich dachte, die Ftp-Session waere schon vorbei.

            Was sagt "file mt-2004-05-18.tar"?

            mt-2004-05-18.tar: GNU tar archive

            Schlecht (dann kann es daran wohl nicht liegen). Funktioniert denn Auspacken auf dem Server? Hast Du auf dem entfernten Server die selbe Distri?

            Gruss
            Thomas

    2. Moin!

      Eine andere Loesung waere rsync; damit wuerden nur Dateien gesichert, die sich geaendert haetten - allerdings ueberschreibt dass dann u.U. aeltere Sicherungen; Du muesstest Dich also in die rsync-Doku mal einlesen, soweit habe ich das nie gebraucht.

      rdiff-backup wäre dafür die ideale Lösung.

      http://rdiff-backup.stanford.edu/

      - Sven Rautenberg