Announcement

Collapse
No announcement yet.

Unix Shell Script - DB Backup

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Unix Shell Script - DB Backup

    Hallo zusammen,

    ich beobachte einige Threads in diesem Forum schon länger. Nun hab ich mich mal registriert, weil ich selbst vor einem Problem stehe.

    Ich habe ein Shell Script für ein File- und DB-Backup einer Website erstellt, welches schon seit einigen Monaten zuverlässig per Cron läuft.
    Dieses möchte ich nun allerdings erweitern. Allerdings komme ich nicht so richtig voran, weil meine Kompetenz auf Unix-Ebene eher wenig bis gar nicht vorhanden ist.

    Hier mal mein bisheriges Script:
    Teil 1
    Code:
    #!/bin/bash
    echo "1. Start des Backup-Vorgangs für Files ..."
    cd /kunden/xxxx
    tar -cjf /backupdisk/backups/archiv_`date +%Y-%m-%d_%H-%M-%S`.tar.gz
    echo "2. File-Backup wurde erfolgreich durchgeführt!"
    
    # alte Backups löschen:
    find /backupdisk/backups/ -type f -mtime +14 -name \*.tar.gz -exec rm {} \;
    Teil 2
    Code:
    #!/bin/sh
    DATUM=`date '+%Y-%m-%d_%H-%M-%S'`
    
    echo "3. Start des Backup-Vorgangs für SQL ..."
    
    # Backup erstellen:
    mysqldump -uUSER -pPASS -hHOST --opt DB-NAME > /backupdisk/backups/archiv-sql.sql
    
    # Backup packen:
    gzip -9 --best /backupdisk/backups/archiv-sql.sql
    
    # gepacktes Backup verschieben/umbenennen
    mv /backupdisk/backups/archiv-sql.sql.gz /backupdisk/backups/archiv-sql_${DATUM}.sql.gz
    
    echo "4. SQL-Backup wurde erfolgreich durchgeführt!"
    
    # alte Backups löschen:
    find /backupdisk/backups/ -type f -mtime +14 -name \*.sql.gz -exec rm {} \;
    
    echo "5. Alle Backups, die älter sind als 14 Tage, wurden gelöscht!
    
    echo "Das Backup wurde erfolgreich durchgeführt." | mail -s "Backup successful" [email protected]
    Ich möchte nun das DB-Backup täglich in eine andere DB auf einem anderen Server einspielen.
    Ich bin nun soweit, dass ich weiß, dass ich ein neues Script brauche, welches auf dem anderen Server liegt und von dort auf das Backup zugreift und es in die eigene DB einspielt. Leider weiß ich nicht, wie ich auf die Dateien zugreifen kann und wie ich die aktuellste gzip-file abfragen kann. Zudem wäre es schön, wenn in Teil 2 des bisherigen Scriptes die Zeilen des DB-Dumps gezählt werden könnten und eine Fehlermeldung per Mail kommt, wenn das Dump weniger Zeilen aufweist, als das Dump vom vorherigen Tag.

    Was meint ihr? Ist das so machbar, wie ich mir das denke?
    Kann mir jemand bei der Erstellung dieses Scriptes helfen?

    Ich freue mich über eure Hilfe und sag jetzt schonmal danke!

  • #2
    Hallo derpups,

    # Backup packen:
    gzip -9 --best /backupdisk/backups/archiv-sql.sql
    Die "-9" würde ich weglassen. Das macht den Packvorgang nur unnötig langsam und verbraucht CPU-Zeit. Bei der Größe gewinnt man fast nichts.

    Leider weiß ich nicht, wie ich auf die Dateien zugreifen kann
    Du musst sie über Netzwerk zugreifbar machen. Wenn du root-Rechte auf den Kisten hast, kannst Du ein Verzeichnis auf dem Sicherungsrechner per nfs oder smb frei geben und auf dem Produktionsrechner mounten. Das hätte den Vorteil, dass Du deinen move-Befehl direkt nutzen kannst und keinen weiteren ftp-/scp-Befehl in Dein Script einbauen musst.


    und wie ich die aktuellste gzip-file abfragen kann.
    Mit folgendem Befehl kriegst Du den Namen der jüngsten Datei raus: ls -1t | head -1 (Einsen keine Ls)

    die Zeilen des DB-Dumps gezählt werden könnten
    Wenn es reicht, wirklich die Zeilen zu zählen (geht natürlich nur bei ausgepackten Dateien), dann nutze folgenden Befehl: wc -l <Dateiname> (Buchstabe L keine Eins)

    nd eine Fehlermeldung per Mail kommt
    Für Mails kannst Du das Kommando mail benutzen. Das funktioniert aber zuverlässig nur für lokale Postfächer. Wenn Du an einen externen Mailserver schicken willst, brauchst Du evtl. noch Zugangsdaten etc. Nachdem die Sicherung ja ein Cronjob ist, würde ich in den syslog schreiben. Das geht mit /bin/logger

    Gruß ngomo
    http://www.winfonet.eu

    Comment


    • #3
      Hallo ngomo,

      Vielen Dank für deine ausführliche Hilfe! Deine Ausführung hat mich ein gutes Stück weiter gebracht.

      Originally posted by ngomo View Post

      Du musst sie über Netzwerk zugreifbar machen. Wenn du root-Rechte auf den Kisten hast, kannst Du ein Verzeichnis auf dem Sicherungsrechner per nfs oder smb frei geben und auf dem Produktionsrechner mounten. Das hätte den Vorteil, dass Du deinen move-Befehl direkt nutzen kannst und keinen weiteren ftp-/scp-Befehl in Dein Script einbauen musst.
      Wie kann ich das Verzeichnis auf einem anderen Rechner mounten? Das klingt irgendwie kompliziert. Meinst nicht, dass es via SCP einfacher wäre?

      Danke & Grüße

      Comment


      • #4
        Geschmacksfrage

        Wie kann ich das Verzeichnis auf einem anderen Rechner mounten? Das klingt irgendwie kompliziert. Meinst nicht, dass es via SCP einfacher wäre?
        Klingt kompliziert, ist es aber nicht. Letzlich kommt es etwas auf Deine Anforderungen an. Der große Pluspunkt bei scp ist, dass es verschlüsselt ist und (fast) ohne weiteres funktioniert. Es ist aber vergleichsweise langsam. Wenn Dich das nicht stört, kannst Du es nutzen. Damit Deine Scripts automatisch ohne Passworteingabe funktionieren, musst Du Deinen Sicherungsserver entsprechend vorbereiten (Stichwort Keys). Nachfolgend ein kurzer Artikel zu dem Thema: http://www.linuxproblem.org/art_9.html

        Der große Pluspunkt von per Netzwerk gemounteten Verzeichnissen ist, dass sie wie Verzeichnisse auf den lokalen Platten benutzt werden können, d.h. find, ls, mv etc. funktionieren.

        Gruß ngomo
        http://www.winfonet.eu

        Comment


        • #5
          Super, Danke!

          Comment

          Working...
          X