Backup: Difference between revisions

From Hobbynet Admin Wiki
Jump to navigation Jump to search
Line 334: Line 334:
rm $HNET_LOCK
rm $HNET_LOCK
</pre>
</pre>
= backup server configs van uit backup2bit =

Revision as of 12:43, 10 February 2019

backup naar bit

Via backup2bit trekt elke nacht rond 01:00 een back-up met snap shots van onze server.
In de nacht van zondag op maandag wordt een full back-up getrokken.
De rest zijn incrimentals.
We bewaren 5 full back-up's en de dagelijkse backup's worden elke week overschreven.

back-up naar nas

Elke dag wordt met rsync een volledige back-up naar de nas getrokken zonder snapshots

script

#!/bin/bash
LOGFILE="/var/log/backup2nas.log"
HNET_LIB=/usr/local/hobbynet/lib
HNET_LOCK=$HNET_LIB/backup2nas.lock
MOUNTDIR=/mnt/backup-nas
BACKUPTARGET=$MOUNTDIR/disk
BACKUP_MOUNT_CHECK_FILE=$MOUNTDIR/ikbengemount.txt
HNET_LOCK_TIME=1200
if [ -e $HNET_LOCK ]; then
        echo "lock file $HNET_LOCK gedetecteerd" >&2
        if test "`find $HNET_LOCK -mmin +$HNET_LOCK_TIME`"
        then
                echo "`date +%F+%R` Lock file $HNET_LOCK is ouder dan $HNET_LOCK_TIME minuten en is daarom verwijderd" >&2
                rm $HNET_LOCK
                echo "het eventueel nog lopend rsync proces wordt getermineerd"
                echo "backup naar $BACKUPTARGET loopt langer dan $HNET_LOCK_TIME minuten, daarom is dit proces getermineerd" | mail -s backup2nas rootmail@hobby.nl
                logger -p auth.notice "=*= backup naar $BACKUPTARGET loopt langer dan $HNET_LOCK_TIME minuten, daarom is dit proces getermineerd =*="
                pkill -f "rsync -a /disk/ $BACKUPTARGET -r -t --delete"
        else
                echo "Script $0 draait op moment al " >&2
                echo "Is dit niet het geval, verwijder $HNET_LOCK en draai het script opnieuw" >&2
                exit
        fi
fi

touch $HNET_LOCK

logger -p auth.notice "=*= backup2nas started on server backup2bit =*="
echo "`date +%F+%R` bezig met backupen van /disk naar backup-hobbynet.hobby.nl" >>"$LOGFILE"
date >>"$LOGFILE"

if [ ! -e $BACKUP_MOUNT_CHECK_FILE ]; then
        echo "$MOUNTDIR wordt gemount"
        mount $MOUNTDIR
fi

if [ -e $BACKUP_MOUNT_CHECK_FILE ]; then
        echo "`date +%F+%R` bezig met backupen van /disk naar $BACKUPTARGET"
        rsync -a  /disk/ $BACKUPTARGET -r -t --delete

        echo "`date +%F+%R` klaar met backup van /disk naar backup-hobbynet.hobby.nl" >>"$LOGFILE"
        date >>"$LOGFILE"
        echo "------------" >>"$LOGFILE"

        echo "`date +%F+%R` klaar met backup van /disk naar $BACKUPTARGET"
        logger -p auth.notice "=*= backup2nas finished on server backup2bit =*="
fi

if [ ! -e $BACKUP_MOUNT_CHECK_FILE ]; then

        echo "`date +%F+%R` backup van /disk naar $BACKUPTARGET MISLUKT"
        echo "backup van /disk naar $BACKUPTARGET MISLUKT" | mail -s backup2nas rootmail@hobby.nl
        logger -p auth.notice "=*= backup2nas MISLUKT on server backup2bit =*="
fi

back-up naar bas (offsite)

Elke dag wordt met rsync een volledige back-up naar de nas bij Bas getrokken zonder snapshots
Dit doen we stel er gebeurt er wat met BIT dan hebben we nog alles achter de hand.
De backup op de nas zijn volledig encrypted, encryptie sleutels zijn bekend bij Bas en Hans

script

#!/bin/bash
LOGFILE="/var/log/backup2bas.log"
HNET_LIB=/usr/local/hobbynet/lib
HNET_LOCK=$HNET_LIB/backup2bas.lock
MOUNTDIR=/mnt/backup-bas
BACKUPTARGET=$MOUNTDIR/disk
BACKUP_MOUNT_CHECK_FILE=$MOUNTDIR/ikbengemount.txt
HNET_LOCK_TIME=1200
if [ -e $HNET_LOCK ]; then
        echo "lock file $HNET_LOCK gedetecteerd" >&2
        if test "`find $HNET_LOCK -mmin +$HNET_LOCK_TIME`"
        then
                echo "`date +%F+%R` Lock file $HNET_LOCK is ouder dan $HNET_LOCK_TIME minuten en is daarom verwijderd" >&2
                rm $HNET_LOCK
                echo "het eventueel nog lopend rsync proces wordt getermineerd"
                echo "backup naar $BACKUPTARGET loopt langer dan $HNET_LOCK_TIME minuten, daarom is dit proces getermineerd" | mail -s backup2bas rootmail@hobby.nl
                logger -p auth.notice "=*= backup naar $BACKUPTARGET loopt langer dan $HNET_LOCK_TIME minuten, daarom is dit proces getermineerd =*="
                pkill -f "rsync -a  /disk/ $BACKUPTARGET -r -t --delete"
        else
                echo "Script $0 draait op moment al " >&2
                echo "Is dit niet het geval, verwijder $HNET_LOCK en draai het script opnieuw" >&2
                exit
        fi
fi

touch $HNET_LOCK

logger -p auth.notice "=*= backup2bas started on server userstore1 =*="
echo "`date +%F+%R` bezig met backupen van /disk naar backup-hobbynet.hobby.nl" >>"$LOGFILE"
date >>"$LOGFILE"

if [ ! -e $BACKUP_MOUNT_CHECK_FILE ]; then
        echo "$MOUNTDIR wordt gemount"
        mount $MOUNTDIR
fi

if [ -e $BACKUP_MOUNT_CHECK_FILE ]; then
        echo "`date +%F+%R` bezig met backupen van /disk naar $BACKUPTARGET"
        rsync -a  /disk/ $BACKUPTARGET -r -t --delete

        echo "`date +%F+%R` klaar met backup van /disk naar backup-hobbynet.hobby.nl" >>"$LOGFILE"
        date >>"$LOGFILE"
        echo "------------" >>"$LOGFILE"

        echo "`date +%F+%R` klaar met backup van /disk naar $BACKUPTARGET"
        logger -p auth.notice "=*= backup2bas finished on server userstore1 =*="
fi

if [ ! -e $BACKUP_MOUNT_CHECK_FILE ]; then

        echo "`date +%F+%R` backup van /disk naar $BACKUPTARGET MISLUKT"
        echo "backup van /disk naar $BACKUPTARGET MISLUKT" | mail -s backup2bas rootmail@hobby.nl
        logger -p auth.notice "=*= backup2bas MISLUKT on server userstore1 =*="
fi

rm $HNET_LOCK

database backups

Elke dag worden op alle databases gebackupt van de servers waar mysql op draait. Voor tijden zie Cron jobs

script op backup2bit

Backup2bit roept de scripts op de individuele servers aan /usr/local/hobbynet/bin/backup_servernaam
Dit script voert eerst database onderhoud uit wat ongebruikte ruimte terug claimed, en dan een back-up gemaakt

#!/bin/sh
SERVER="db01-int"
REMOTE_MAP="/backup"
LOCAL_MAP="/databases"
LOGFILE="/var/log/backup_all.log"

logger -p auth.notice "=*= backup $SERVER  started on server backup2bit =*="


echo "bezig met backupen van $SERVER$REMOTE_MAP" >>"$LOGFILE"
date >>"$LOGFILE"
echo "bezig met backupen van $SERVER$REMOTE_MAP"
echo "maak mysql backups op $SERVER"
echo "maak mysql backups op $SERVER" >>"$LOGFILE"
ssh root@$SERVER /usr/local/hobbynet/bin/database-onderhoud $SERVER
ssh root@$SERVER /usr/local/hobbynet/bin/backup_mysql       $SERVER

mkdir /disk/backup/$SERVER$LOCAL_MAP -p
chmod o-x /disk/backup/$SERVER$LOCAL_MAP
rsync root@$SERVER:$REMOTE_MAP/ /disk/backup/$SERVER$LOCAL_MAP/ -r -t --cvs-exclude --delete

echo "klaar met backup van $SERVER$REMOTE_MAP" >>"$LOGFILE"
date >>"$LOGFILE"
echo "------------" >>"$LOGFILE"
echo "klaar met backup van $SERVER$REMOTE_MAP"

logger -p auth.notice "=*= backup $SERVER finished on server backup2bit =*="

root@backup2bit:~# cat /usr/local/hobbynet/bin/backup_domein
#!/bin/sh
SERVER="domein-int"
REMOTE_MAP="/backup"
LOCAL_MAP="/databases"
LOGFILE="/var/log/backup_all.log"

logger -p auth.notice "=*= backup $SERVER started on server backup2bit =*="

echo "bezig met backupen van $SERVER$REMOTE_MAP" >>"$LOGFILE"
date >>"$LOGFILE"
echo "bezig met backupen van $SERVER$REMOTE_MAP"
echo "maak mysql backups op $SERVER"
echo "maak mysql backups op $SERVER" >>"$LOGFILE"
ssh root@$SERVER /usr/local/hobbynet/bin/database-onderhoud $SERVER
ssh root@$SERVER /usr/local/hobbynet/bin/backup_mysql       $SERVER

mkdir /disk/backup/$SERVER$LOCAL_MAP -p
chmod o-x /disk/backup/$SERVER$LOCAL_MAP
rsync root@$SERVER:$REMOTE_MAP/ /disk/backup/$SERVER$LOCAL_MAP/ -r -t --cvs-exclude --delete

echo "klaar met backup van $SERVER$REMOTE_MAP" >>"$LOGFILE"
date >>"$LOGFILE"
echo "------------" >>"$LOGFILE"
echo "klaar met backup van $SERVER$REMOTE_MAP"

logger -p auth.notice "=*= backup $SERVER finished on server backup2bit =*="

script database-onderhoud

#!/bin/bash
HNET_BIN=/usr/local/hobbynet/bin
HNET_LIB=/usr/local/hobbynet/lib
HNET_TMP=/usr/local/hobbynet/tmp
HNET_LOCK=$HNET_TMP/database-onderhoud.lock
DB_LOG=/var/log/dbonderhoud

if [ -e $HNET_LOCK ]; then
 echo "Script $0 is already running"
 echo "If not, remove $HNET_LOCK and run again"
 exit
fi

# Create the lockfile
touch $HNET_LOCK

logger -p auth.notice "=*= Database onderhoud gestart =*="
echo  "=*= Database onderhoud gestart =*=" >>$DB_LOG
date >>$DB_LOG
mysqlcheck -a --auto-repair             --all-databases >>$DB_LOG
mysqlcheck    --auto-repair  --optimize --all-databases >>$DB_LOG
mysqlcheck -a --auto-repair             --all-databases >>$DB_LOG
echo "=*= Klaar met Database onderhoud =*=" >>$DB_LOG
date >>$DB_LOG
logger -p auth.notice "=*= Klaar met Database onderhoud =*="

# Finally remove the file lock
rm $HNET_LOCK

script /usr/local/hobbynet/bin/backup_mysql

#! /bin/bash

#
# aanroepen met "backup_mysql <servernaam>"
# voorbeeld:    ""backup_mysql db01-int"
#

TIMESTAMP=$(date +"%F")
MYSQL=/usr/bin/mysql
MYSQLDUMP=/usr/bin/mysqldump
MYSQLUSER=root
MAXAGEDAYS=7
SERVER=$1
DAG=$(date +%a)
DATUMVOLLEDIGNL=$(LC_TIME="nl_NL.UTF-8" date "+%A %d %B %Y")
TIJD=$(date +%H:%M)
BACKUPS="/backup"
BACKUP_DIR="$BACKUPS/$TIMESTAMP"
BACKUP_DIR_DB=$BACKUP_DIR/mysql
HNET_LIB=/usr/local/hobbynet/lib
HNET_TMP=/usr/local/hobbynet/tmp
HNET_LOCK=$HNET_TMP/backup_mysql.lock
EMAIL=backup@hobby.nl
BACKUPRAPPORT=$HNET_TMP/backuprapport
DUMPFAILED=0

if [ $# -eq 0 ]; then
 echo "Servernaam *moet* als parameter meegegeven worden. Script zal niet draaien voordat dit is aangepast!" >&2
 exit 1
fi

if [ -e $HNET_LOCK ]; then
 echo "Script $0 is already running"
 echo "If not, remove $HNET_LOCK and run again"
 echo "$0 is locked. Please remove $HNET_LOCK and run again on $SERVER" | mail rootmail@hobby.nl -s Lockfile
 exit
fi

# Create the lockfile
touch $HNET_LOCK

echo "$SERVER MySQL database backup gestart op $DATUMVOLLEDIGNL om $(date +%H:%M)" >>$BACKUPRAPPORT
logger -p auth.notice "=*= MySQL database backup gestart op $DATUMVOLLEDIGNL om $(date +%H:%M) =*="

printf "\n\r" >>$BACKUPRAPPORT

mkdir -p "$BACKUP_DIR_DB"

databases=`$MYSQL -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema|sys)"`

for db in $databases; do
 # Dump this database
 $MYSQLDUMP -u$MYSQLUSER --force --opt --single_transaction --databases $db --events >$BACKUP_DIR_DB/$db
 if [[ $(tail -1 $BACKUP_DIR_DB/$db) != *"Dump completed on"* ]]; then
  echo "** LET OP** Onverwachte output uit dump. Controleer database backup $db. De laatste regel van DUMP was:" >>$BACKUPRAPPORT
  DUMPFAILED=1
 fi
 printf "%-25s: " "$db" >>$BACKUPRAPPORT
 tail -1 $BACKUP_DIR_DB/$db >>$BACKUPRAPPORT
 if [ -e $BACKUP_DIR_DB/$db.bz2 ]; then
  rm $BACKUP_DIR_DB/$db.bz2
 fi
 bzip2 "$BACKUP_DIR_DB/$db"
done

chmod 600 $BACKUP_DIR/* -R
chmod +X  $BACKUP_DIR/* -R

printf "\n\r" >>$BACKUPRAPPORT
echo "========================================================================" >>$BACKUPRAPPORT
echo "De volgende backups zijn ouder dan $MAXAGEDAYS dagen en worden dan ook verwijderd:" >>$BACKUPRAPPORT
echo "========================================================================" >>$BACKUPRAPPORT
printf "\n\r" >>$BACKUPRAPPORT
(echo "Bestand,Grootte" ;(find $BACKUPS -maxdepth 1 -type d -mtime +$MAXAGEDAYS -exec sh -c 'du -h "{}"' \;| sed "s|$BACKUPS/||"| awk '{ t = $1; $1 = $2; $2 = t; print; }'| sed 's| |,|' |sort))|column -t -n -s, >>$BACKUPRAPPORT
printf "\n\r" >>$BACKUPRAPPORT
find $BACKUPS -maxdepth 1 -type d -mtime +$MAXAGEDAYS -exec rm -rf {} \;

# Haal (tijdelijk) ook bestanden in het oude formaat weg (staan op /backup/mysql)
# (echo "Bestand,Grootte" ;(find $BACKUPS/mysql -type f -mtime +$MAXAGEDAYS -exec sh -c 'du -h "{}"' \;| sed "s|$BACKUPS/||"| awk '{ t = $1; $1 = $2; $2 = t; print; }'| sed 's| |,|' |sort))|column -t -n -s, >>$BACKUPRAPPORT
# printf "\n\r" >>$BACKUPRAPPORT
# find $BACKUPS/mysql -type f -mtime +$MAXAGEDAYS -exec rm -f {} \;

printf "\n\r" >>$BACKUPRAPPORT
echo "===============================================================" >>$BACKUPRAPPORT
echo "Overzicht van de huidige volledige database backups en grootte:" >>$BACKUPRAPPORT
echo "===============================================================" >>$BACKUPRAPPORT
printf "\n\r" >>$BACKUPRAPPORT
(echo "Bestand,Grootte" ;(du -S -h $BACKUP_DIR_DB/*|awk '{ t = $1; $1 = $2; $2 = t; print; }'|sed "s|$BACKUP_DIR_DB/||"|sed 's| |,|'|sort))|column -t -n -s, >>$BACKUPRAPPORT

printf "\n\r" >>$BACKUPRAPPORT
echo "===============================" >>$BACKUPRAPPORT
echo "Totale omvang van de bestanden:" >>$BACKUPRAPPORT
echo "===============================" >>$BACKUPRAPPORT
(echo "Bestand,Grootte" ;(du -h --max-depth=1 $BACKUPS|awk '{ t = $1; $1 = $2; $2 = t; print; }'|sed 's| |,|') |sort)|column -t -n -s, >>$BACKUPRAPPORT

printf "\n\r" >>$BACKUPRAPPORT
echo "===============================================================" >>$BACKUPRAPPORT
if [ $DUMPFAILED == 0 ]; then
 echo "MySQL database backup afgerond op $DATUMVOLLEDIGNL om $(date +%H:%M)" >>$BACKUPRAPPORT
 logger -p auth.notice "=*= MySQL database backup afgerond op $DATUMVOLLEDIGNL om $(date +%H:%M) =*="
 cat $BACKUPRAPPORT | mail $EMAIL -s "MySQL Database backup rapport van $SERVER op $DATUMVOLLEDIGNL"
else
 echo "MySQL database backup MISLUKT op $DATUMVOLLEDIGNL om $(date +%H:%M)" >>$BACKUPRAPPORT
 logger -p auth.notice "=*= MySQL database backup MISLUKT op $DATUMVOLLEDIGNL om $(date +%H:%M) =*="
 cat $BACKUPRAPPORT | mail $EMAIL -s "MySQL Database backup MISLUKT!!!!!! rapport van $SERVER op $DATUMVOLLEDIGNL"
fi

#remove backup report
rm $BACKUPRAPPORT
#remove the lockfile
rm $HNET_LOCK

backup server configs van uit backup2bit