stiziwik
Sie befinden sich hier: Willkommen » linux » Backupscript
Zuletzt angesehen: • Backupscript

Dies ist eine alte Version des Dokuments!


Backupscript

Hier ein Script welches Dateien und MySQL-Datenbanken sichern kann.
In den ersten Zeilen steht auch wie man es installiert.

#!/bin/bash
# 

### Installation:
## Auf jeweiligem Server per SSH verbinden und folgendes ausführen:
## touch /usr/local/bin/backup.sh
## chmod a+x /usr/local/bin/backup.sh && ln -s /usr/local/bin/backup.sh /etc/cron.daily/ && vi /usr/local/bin/backup.sh
##
## In die neue Datei diesen Inhalt hineinkopieren und die Variablen anpassen, danach Fertig.


# Datensicherungsziel OHNE abschliessenden Slash
DEST="/datensicherung"
BACKUPLOG=${DEST}/${BINHOSTNAME}-backup.log
# Dateien loeschen die aelter als X Minuten sind (1440 = 24 Stunden)
OLDMIN="1380" # 23 Stunden

# MySQL Zugangsdaten
DBUSER=""
DBPASS=""

# MySQL Datenbanken (Leerzeichen getrennt)
DBS=""
DBIGNORE="(^mysql|_schema)" # Grep Regex

# Datei -/Ordnerpfade (Leerzeichen getrennt, ohne abschliessenden Slash)
DIRS=""

#### Ab hier Finger weg, wenn keine Ahnung ####

# binary Pfade
BINHOSTNAME=`which hostname`
BINMYSQLDUMP=`which mysqldump`
BINTAR=`which tar`
BINGZIP=`which gzip`
BINCAT=`which cat`
BINFIND=`which find`
BINRM=`which rm`
BINMOUNT=`which mount`
BINUMOUNT=`which umount`

# Timestamp fuer logging
LOGTS="$(date "+%b %d %Y %H:%M:%S")"

# Filename prefix
FILEPREFIX="$(date +%Y-%m-%d_%H-%M).`${BINHOSTNAME} -s`"


#
# Mount Check
#
ERROR=0
if grep -qs "${DEST}" /proc/mounts; then
        echo "${LOGTS} It's mounted."

        if touch "${DEST}/test.touch" 2>/dev/null; then
                rm "${DEST}/test.touch"
                echo "${LOGTS} It's writeable."
        else
          echo "${LOGTS} WARNUNG: Ziel nicht beschreibbar."
                ERROR="1"
        fi

else
        echo "${LOGTS} WARNUNG: Ziel nicht gemounted."
        ERROR=1
fi

if [ ${ERROR} != 0 ]; then
        echo "${LOGTS} WARNUNG: Versuche mount!"
        ${BINUMOUNT} ${DEST} 2>/dev/null
        ${BINMOUNT} ${DEST}

        if touch "${DEST}/test.touch" 2>/dev/null; then
                rm "${DEST}/test.touch"
                echo "${LOGTS} It's writeable."
        else
                echo "${LOGTS} WARNUNG: Ziel immer noch nicht beschreibbar."
                exit 1
        fi

fi


#
# MySQL
#
if [ ! -z "$DBUSER" ]; then
        DBS=$(mysql -u$DBUSER -p$DBPASS --batch --disable-column-names -e "SHOW DATABASES;")
        if [ ! -z "$DBIGNORE" ]; then
          DBS=$(echo "$DBS" | grep -vE "$DBIGNORE")
        fi
        for db in ${DBS}
        do
          echo "${LOGTS} sichere Datenbank: $db"
          ${BINMYSQLDUMP} -u${DBUSER} --password=${DBPASS} --opt $db | ${BINGZIP} -c | ${BINCAT} > "${DEST}/${FILEPREFIX}.$db.sql.gz"
        done
fi


#
# Dateien
#
echo "${LOGTS} sichere Dateien: ${DIRS}"

${BINTAR} -zcvf "${DEST}/${FILEPREFIX}.files.tar.gz" ${DIRS} 1> /dev/null


#
# Alte Backups loeschen
#
echo "${LOGTS} loesche Backups welche aelter als ${OLDMIN} Sekunden sind"
${BINFIND} ${DEST}/*.gz -type f -mmin +${OLDMIN} -exec ${BINRM} {} \;
exit 0

#
# Mail Backup-Log
#
if grep -qs 'erfolgreich' ${BACKUPLOG}; then
  SUBJECT="$(hostname)_Backup-OK"
else
  SUBJECT="$(hostname)_Backup-Fehler"
fi

mail ${MAILRCPT} -s ${SUBJECT} << EOF
Die erstellte Sicherungsdatei lautet: `ls -l ${DESTDIR}/${FILEPREFIX}*|awk '{print $9}'|grep ${FILEPREFIX}*`

Informationen zur Datei:

`ls -lh ${DESTDIR}/${FILEPREFIX}*`

Informationen zum Sicherungslog `ls -l ${BACKUPLOG}|awk '{print $9}'`
`cat ${BACKUPLOG}`
EOF
exit 0

Inkrementelles Backup

Damit man täglich nicht immer die selbe Menge sichern muss, sondern nur die Änderungen, weist man tar an eine „Inkrementelle Sicherung“ zu erstellen.
Man fügt zum tar-Befehl einfach den Parameter -g <PFAD_ZU>/<SNAPSHOTFILE> hinzu.
Um dann zwischendurch noch Komplette Sicherungen zu erstellen kommt noch wahlweise der Parameter –level=0
In unserem Script fügt man oben einen neuen Parameter hinzu und ändert folgende Zeile:

+++ SNAPFILE=${DEST}/snap.snar
--- ${BINTAR} -zcvf "${DEST}/${FILEPREFIX}.files.tar.gz" ${DIRS} 1> /dev/null
+++ ${BINTAR} -zcvf "${DEST}/${FILEPREFIX}.files.tar.gz" -g ${SNAPFILE} $1 ${DIRS} 1> /dev/null

Nun fügt man in der /etc/crontab diese Zeilen hinzu, um z.B. Sonntags eine komplette und an den sonstigen Tagen einen inkrementelle Sicherung zu erstellen.

# m h dom mon dow user  command
<MINUTE> <STUNDE> * * 0   root  <PFAD_ZU>/backup.sh "--level=0" > <PFAD_ZU_FULLBACKUP_LOG>
<MINUTE> <STUNDE> * * 1-6   root  <PFAD_ZU>/backup.sh > <PFAD_ZU_INKBACKUP_LOG>
Previous Next

Webseiten-Werkzeuge

  • Letzte Änderungen
  • Medien-Manager
  • Übersicht

Seiten-Werkzeuge

  • Zeige Quelltext
  • Ältere Versionen
  • Links hierher
  • Nach oben

Benutzer-Werkzeuge

  • Anmelden
linux/backupscript.1588597129.txt.gz · Zuletzt geändert: 2020/05/04 14:58 von 127.0.0.1
stiziwik

Table of Contents

  • Android
  • Bild-und-video
  • Datenverarbeitung
  • Fahrzeuge
  • Hausautomatisation
  • linux
    • Alix-router
    • Icinga
    • Log-Server
    • Mail
    • Mysql
    • Nagios
    • Owncloud
    • Virtualisierung
    • Webcam
    • Accl Attr
    • Alternativen-System
    • Antivirus-live
    • Anzahl
    • Audacious
    • Audiodateien-umwandeln
    • Avira-Live-Rescue
    • Backupscript
    • Bash
    • Beep-mit-Ringtones
    • Benutzerpassword Deaktivieren
    • Bluetooth
    • Bootvorgang
    • CD-Ripper
    • Clonezilla
    • Coredump
    • Datenrettung
    • Datum Und Uhrzeit
    • dd
    • Desktop-dateien
    • Docker
    • Duplikate
    • Fail2ban
    • Festplatten
    • Fingerprintsensor
    • Gddrescue
    • Geda
    • Genisoimage mkisofs
    • Grub
    • Internetradio
    • Ipod
    • Journalctl
    • Keepass
    • Kernel Bauen
    • Keystore
    • Live-CD erstellen
    • Lnav
    • Lshw-hardware
    • Message-of-the-day
    • Midnight Commander
    • Mongodb
    • Nohup, Hintergrund, anhalten und Co
    • Openssl
    • Pakete bauen
    • Paketverwaltung
    • Passwort-Generator
    • Patches
    • Prüfsumme
    • Quota
    • Remote Desktop Verbindung
    • Request Tracker
    • Rsync
    • Samba
    • Scriptschnipsel
    • Serielle-Konsole
    • Smartmontools
    • Sms-gateway
    • Softwareraid
    • Squid
    • SSH
    • Stats
    • Stresstest
    • Strongswan VPN
    • Sudo
    • Supergrub2disk
    • Supervisord
    • Swap
    • Syslog
    • Systemrescue
    • Tftp
    • Thunderbird
    • Umbenennen
    • Unity Fenstermanager
    • Video-streaming
    • Virenscan-script
    • Virtualbox
    • Virtualisierung
    • Vnc-vino
    • Watchdog
    • Webmin
    • Wmctrl
    • Zeitsynchronisation Mit DCF-77 Empfänger
    • Zoneminder
  • Nas
  • Netzwerk
  • PlayGround
  • Programieren
  • Projekte
  • Raspberry Pi
  • sonstiges
  • VDR
  • Web
  • Werkstatt
  • Wiki
  • sidebar-acmenu
  • sidebar-indexmenu
  • sidebar-simplenavi