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

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

linux:backupscript [2020/05/04 14:58] – angelegt - Externe Bearbeitung 127.0.0.1linux:backupscript [2025/02/23 11:36] (aktuell) – [Backupscript] adi
Zeile 15: Zeile 15:
 # Datensicherungsziel OHNE abschliessenden Slash # Datensicherungsziel OHNE abschliessenden Slash
 DEST="/datensicherung" DEST="/datensicherung"
 +TMPDIR="${DEST}/tmpbackup"
 BACKUPLOG=${DEST}/${BINHOSTNAME}-backup.log BACKUPLOG=${DEST}/${BINHOSTNAME}-backup.log
 +MAILRCPT="<EMPFÄNGER_MAILADRESSE>"
 +
 # Dateien loeschen die aelter als X Minuten sind (1440 = 24 Stunden) # Dateien loeschen die aelter als X Minuten sind (1440 = 24 Stunden)
 OLDMIN="1380" # 23 Stunden OLDMIN="1380" # 23 Stunden
  
 # MySQL Zugangsdaten # MySQL Zugangsdaten
 +DBHOST=""
 DBUSER="" DBUSER=""
 DBPASS="" DBPASS=""
Zeile 26: Zeile 30:
 DBS="" DBS=""
 DBIGNORE="(^mysql|_schema)" # Grep Regex DBIGNORE="(^mysql|_schema)" # Grep Regex
 +
 +# MongoDB Zugangsdaten
 +MONGODBUSER=""
 +MONGODBPASS=""
  
 # Datei -/Ordnerpfade (Leerzeichen getrennt, ohne abschliessenden Slash) # Datei -/Ordnerpfade (Leerzeichen getrennt, ohne abschliessenden Slash)
Zeile 42: Zeile 50:
 BINMOUNT=`which mount` BINMOUNT=`which mount`
 BINUMOUNT=`which umount` BINUMOUNT=`which umount`
 +BINDOCKER=`which docker`
 +BINDOCKERCOMPOSE=`which docker-compose`
 +BINMAIL=`which mail`
 +BINSENDMAIL=`which sendmail`
 +BINSSMTP=`which ssmtp`
 +DOCKERCONTAINERDIR="/var/lib/docker/volumes"
  
 # Timestamp fuer logging # Timestamp fuer logging
-LOGTS="$(date "+%b %d %Y %H:%M:%S")"+LOGTS () { 
 +  date "+%b %d %Y %H:%M:%S" 
 +}
  
 # Filename prefix # Filename prefix
Zeile 85: Zeile 101:
 fi fi
  
 +
 +function db_backup () {
  
 # #
 # MySQL # MySQL
 # #
 +
 if [ ! -z "$DBUSER" ]; then if [ ! -z "$DBUSER" ]; then
-        DBS=$(mysql -u$DBUSER -p$DBPASS --batch --disable-column-names -e "SHOW DATABASES;") +  DBS=$(/usr/bin/mysql -u$DBUSER -p$DBPASS -h$DBHOST --batch --disable-column-names -e "SHOW DATABASES;") 
-        if [ ! -z "$DBIGNORE" ]; then +  if [ ! -z "$DBIGNORE" ]; then 
-          DBS=$(echo "$DBS" | grep -vE "$DBIGNORE") +    DBS=$(echo "$DBS" | grep -vE "$DBIGNORE") 
-        fi +  fi 
-        for db in ${DBS} +  for db in ${DBS} 
-        do +  do 
-          echo "${LOGTS} sichere Datenbank: $db" +    echo "$(LOGTS): sichere Datenbank: $db" 
-          ${BINMYSQLDUMP} -u${DBUSER} --password=${DBPASS} --opt $db | ${BINGZIP} -c | ${BINCAT} > "${DEST}/${FILEPREFIX}.$db.sql.gz" +    /usr/local/bin/mysqldump -u${DBUSER} --password=${DBPASS} -h $DBHOST --opt $db > "${DEST}/${FILEPREFIX}.$db.sql" 
-        done+  done 
 +  if [ $? -eq 0 ]; then 
 +    DBBACKUP=0 
 +  else 
 +    DBBACKUP=1 
 +  fi
 fi fi
 +}
  
 +function influxdb_backup () {
 +#
 +# Influxdb
 +#
  
 +INFLUXCONTAINER=$(${BINDOCKER} ps -f "name=influxdb2" --format "{{.ID}}")
 +
 +echo "$(LOGTS): sichere Influxdb"
 +
 +${BINDOCKER} exec -t ${INFLUXCONTAINER} influx backup /backup/${FILEPREFIX}-influx -t <INFLUXDB_TOKEN>
 +
 +if [ $? -eq 0 ]; then
 +    INFLUXDBBACKUP=0
 +  else
 +    INFLUXDBBACKUP=1
 +  fi
 +
 +mv <PFAD_ZU_EXT_BACKUPDIR_AUSSERHALB_DES_CONTAINERS/${FILEPREFIX}-influx ${DEST}
 +}
 +
 +unction mongodb_backup () { 
 +#
 +# mongodb
 +#
 +echo "$(LOGTS): sichere Mongodb"
 +
 +MONGODBLIST=$(${BINDOCKER} exec mongodb sh -c "mongo -u ${MONGODBUSER} -p ${MONGODBPASS} --quiet --eval  \"printjson(db.adminCommand('listDatabases'))\"| jq  '.databases[].name' | tr -d '\"'")
 +
 +for mdb in $MONGODBLIST
 +do
 +  ${BINDOCKER} exec mongodb sh -c "exec mongodump -u ${MONGODBUSER} -p ${MONGODBPASS} --authenticationDatabase admin --quiet --tlsInsecure --db ${mdb} --archive --gzip --dumpDbUsersAndRoles > /backup/mongodb-${mdb}-$FILEPREFIX.archive.gz"
 +done
 +
 +if [ $? -eq 0 ]; then
 +    MONGODBBACKUP=0
 +  else
 +    MONGODBBACKUP=1
 +  fi
 +
 +}
 +
 +function paperless_backup () {
 +#
 +# Paperless
 +#
 +## backup paperless
 +echo "$(LOGTS): sichere Paperless"
 +
 +${BINDOCKER} exec -t paperless-ngx document_exporter ../export -d -z
 +
 +if [ $? -eq 0 ]; then
 +    PAPERLESSBACKUP=0
 +  else
 +    PAPERLESSBACKUP=1
 +  fi
 +
 +}
 +
 +function file_backup () {
 # #
 # Dateien # Dateien
Zeile 109: Zeile 192:
 ${BINTAR} -zcvf "${DEST}/${FILEPREFIX}.files.tar.gz" ${DIRS} 1> /dev/null ${BINTAR} -zcvf "${DEST}/${FILEPREFIX}.files.tar.gz" ${DIRS} 1> /dev/null
  
 +CONTAINER=$(ls <PFAD_ZU_DOCKER_COMPOSE_PROJEKTEN>)
 +## stop containers
 +for application in ${CONTAINER}
 +do
 +  echo "$(LOGTS): Stoppe Docker Container: $application."
 +  ${BINDOCKER} compose -f ${DOCKERCONTAINERDIR}/$application/docker-compose.yml pause
 +done
 +
 +# sync files
 +echo "$(LOGTS): sichere Dateien aus: ${DIRS}"
 +mkdir ${TMPDIR}
 +rsync -a ${DIRS} ${TMPDIR}
 +if [ $? -eq 0 ]; then
 +  FILEBACKUP=0
 +else
 +  FILEBACKUP=1
 +fi
 +
 +## start containers
 +for application in ${CONTAINER}
 +do
 +  echo "$(LOGTS): Starte Docker Container: $application."
 +  ${BINDOCKER} compose -f ${DOCKERCONTAINERDIR}/$application/docker-compose.yml unpause
 +done
 +
 +# tar synced files
 +echo "$(LOGTS): Erstelle Archiv aus : ${TMPDIR}"
 +${BINTAR} -cvf "${DEST}/${FILEPREFIX}.files.tar" ${TMPDIR}/* 1> /dev/null
 +# ${BINTAR} -zcvf "${DEST}/${FILEPREFIX}.files.tar.gz" ${TMPDIR}/* 1> /dev/null
 +if [ $? -eq 0 ]; then
 +  FILETARBACKUP=0
 +else
 +  FILETARBACKUP=1
 +fi
 +echo "$(LOGTS): Archiv erstellt, rämue auf."
 +rm -r ${TMPDIR}
 +}
  
 +function file_purge () {
 # #
 # Alte Backups loeschen # Alte Backups loeschen
 # #
-echo "${LOGTS} loesche Backups welche aelter als ${OLDMIN} Sekunden sind" +echo "$(LOGTS): loesche Backups welche aelter als ${OLDMIN} Sekunden sind" 
-${BINFIND} ${DEST}/*.gz -type f -mmin +${OLDMIN} -exec ${BINRM} {} \; +${BINFIND} ${DEST}/ -type f \( -iname \*.tar -o -iname \*.sql \) -mmin +${OLDMIN} -exec ${BINRM} {} \; 
-exit 0+${BINFIND} ${DEST}/ -type d -name "*-influx" -mmin +${OLDMIN} -exec ${BINRM} -r {} \; 
 +}
  
 +function send_mail () {
 # #
 # Mail Backup-Log # Mail Backup-Log
 # #
-if grep -qs 'erfolgreich' ${BACKUPLOG}; then +if ! [[ "1" =~ ^(${DBBACKUP}|${INFLUXDBBACKUP}|${MONGODBBACKUP}|${PAPERLESSBACKUP}|${FILEBACKUP}|${FILETARBACKUP})$ ]]; then 
-  SUBJECT="$(hostname)_Backup-OK"+#if [ "${DBBACKUP}" -eq 0 ] && [ "${INFLUXDBBACKUP}" -eq 0  ] && [ "${FILEBACKUP}" -eq 0  ] && [ "${FILETARBACKUP}" -eq 0  ]; then 
 +  SUBJECT="OK: $(hostname)_Backup"
 else else
-  SUBJECT="$(hostname)_Backup-Fehler"+  SUBJECT="WARN: $(hostname)_Backup-Fehler"
 fi fi
  
-mail ${MAILRCPT} -s ${SUBJECT} << EOF +echo "$(LOGTS): Versende Mail" 
-Die erstellte Sicherungsdatei lautet: `ls -l ${DESTDIR}/${FILEPREFIX}*|awk '{print $9}'|grep ${FILEPREFIX}*`+#####${BINMAIL} ${MAILRCPT} -s ${SUBJECT} << EOF 
 +#####${BINSENDMAIL} ${MAILRCPT} << EOF 
 +#####${BINSSMTP} ${MAILRCPT} << EOF 
 +subject:"${SUBJECT}"
  
-Informationen zur Datei:+Die erstellten Sicherungsdateien sind: 
 +`ls -lh -d ${DEST}/${FILEPREFIX}*|awk '{printf "%-4s %-3s %-2s %-5s %s\n", $5, $6, $7, $8,$9}'`
  
-`ls -lh ${DESTDIR}/${FILEPREFIX}*`+Informationen zum Sicherungslog: `ls -l ${BACKUPLOG}|awk '{print $9}'` 
 +`cat ${BACKUPLOG}|grep "$(date "+%b %d %Y")"`
  
-Informationen zum Sicherungslog `ls -l ${BACKUPLOG}|awk '{print $9}'` + 
-`cat ${BACKUPLOG}`+echo "Errorlevel von DBBACKUP ${DBBACKUP}" 
 +echo "Errorlevel von INFLUXDBBACKUP ${INFLUXDBBACKUP}" 
 +echo "Errorlevel von MONGODBBACKUP ${MONGODBBACKUP}" 
 +echo "Errorlevel von PAPERLESSBACKUP ${PAPERLESSBACKUP}" 
 +echo "Errorlevel von FILEBACKUP ${FILEBACKUP}" 
 +echo "Errorlevel von TARBACKUP ${FILETARBACKUP}"
 EOF EOF
 +}
 +
 +#DBBACKUP=0
 +#INFLUXDBBACKUP=0
 +#MONGODBBACKUP=1
 +#PAPERLESSBACKUP=0
 +#FILEBACKUP=0
 +#FILETARBACKUP=0
 +
 +
 +db_backup
 +influxdb_backup
 +mongodb_backup
 +paperless_backup
 +file_backup
 +file_purge
 +send_mail
 +
 exit 0 exit 0
  

Webseiten-Werkzeuge

  • Letzte Änderungen
  • Medien-Manager
  • Übersicht

Seiten-Werkzeuge

  • Seite anzeigen
  • Ä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
    • Mailcow
    • 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
    • Zertifikate
    • Zoneminder
  • Nas
  • Netzwerk
  • PlayGround
  • Programieren
  • Projekte
  • Raspberry Pi
  • sonstiges
  • VDR
  • Web
  • Werkstatt
  • Wiki
  • sidebar-acmenu
  • sidebar-indexmenu
  • sidebar-simplenavi