Backup-Script für lima-city

Gepostet am 03 April 2012 in: backup

Mir war vor kurzem mal wieder Langweilig, da hab ich dieses kleine Backup-Script für Linux geschrieben, dabei werden Datenbanken und der Webspace gesichert.

Im ersten Teil des Scripts sind die Einstellungen, in welchen man die Zugangsdaten zu den einzelnen Diensten angeben kann. Dort ist es auch möglich das Backup des Download-Servers Ein- und Auszuschalten, da das Herunterladen der Dateien Download-Volumen verbraucht.

Um Speicherplatz zu sparen werden lediglich 4 alte und das neue Backup gespeichert. Die alten werden gelöscht.

Das Datenbank-Backup wird mit dem Programm mysqldump gemacht und gleich bzip-Komprimiert. Da man bei Lima keine Tabellen sperren kann, wird die Option –lock-tables=false benötigt. Zudem werden alle Einstellungen an das Programm übergeben.

######################
# do database backup #
######################

if [ ! "$DATABASE" = '-A' ] ; then
    DATABASE="--databases $DATABASE"
fi

echo "Saving MySQL backup..."
mysqldump --lock-tables=false -u$DB_USER -h$DB_HOST -p$DB_PASSWORD $DATABASE | \
    bzip2 > ${DIR}${DATE}.sql.bz2
echo "Backup saved as '$DIR$DATE.sql.bz2'"

Für das Webspace Update wird zuerst ein Temporäres Verzeichnis, in welches die Dateien heruntergeladen werden. Das Herunterladen erfolgt mit lftp, mit -e werden die Befehle übergeben, die lftp ausführen soll. mirror . lädt alle Dateien und Verzeichnisse herunter, nach dem Herunterladen wird dann mit quit die Verbindung zum FTP-Server geschlossen. Anschließend werden die Dateien mit tar gepackt und die Temporären Dateien gelöscht.

######################
# do webspace backup #
######################

echo "Making backup of Webspace..."
# temp dir
mkdir tmp
cd tmp
# download the files
lftp -u "$USER:$PASSWORD" $HOST -e 'mirror . ; quit'
# put them in an archive
tar cavf "../${DIR}${DATE}_webspace.tar.bz2" *
#and remove the temp files
cd ..
rm -rf tmp
echo "Backup saved as ${DIR}${DATE}_webspace.tar.bz2"

Da man beim Download Server via FTP nur Dateien hochladen kann, aber nicht herunter, muss man sich eine Liste der Dateien besorgen und diese anschließend via HTTP herunterladen. Die Liste kann man mit lftp erzeugen, dazu wird der Befehl find verwendet, welcher alle Dateien auflistet mit sed werden unnötige Leerzeichen am Ende der Zeilen entfernt. Danach werden die Dateien mit wget heruntergeladen, gepackt und die Temporären Dateien gelöscht.

##########################
# Backup Download-Server #
##########################

if [ $DL -eq 1 ] ; then
    echo "Backing Up Download-Server..."
    # temp dir
    mkdir tmp
    cd tmp
    # receive filelist
    FILES=$(lftp -u "$DL_USER:$DL_PASSWORD" $DL_HOST -e 'find;quit'|\
        sed -rn 's_^\./(.+[^/ ])\s*$__p')
    for i in $FILES ; do
        d="./${i%$(basename $i)}"
        [ ! -d "$d" ] && mkdir "$d"
        wget "http://download.lima-city.de/$USER/$i" -O "$i"
    done
    tar cavf "../${DIR}${DATE}_download.tar.bz2" *
    cd ..
rm -rf tmp
echo "Backup saved as ${DIR}${DATE}_download.tar.bz2"
fi

Das komplette Script gibt es hier, da man auf lima-city leider keine Bash-Dateien hochladen kann, ist es der Code in einer HTML-Datei:
thomasba.lima-city.de/stuff/lima_backup.sh.html