Backup-Script für TYPO3

Letzte Änderung:

Warum ein eigenes TYPO3 Backup?

Die meisten Provider bieten standardmäßig Backups des gesamten Webspaces an(Datenbank und Dateien). Das Problem ist, dass dafür in der Regel keine Gewährleitung gegeben wird(meistens nachzulesen in den Allgemeinen Geschäftbedingungen der Provider). D.h. im schlimmsten Fall kann es sein, dann Sie ohne Website "dastehen" oder hoffen müssen, irgendwo eine alte Kopie zu finden.

Das sind die Vorteile unseres Backup-Programms:

  • zusätzliche Sicherheit durch eigene Kopie und damit unabhängig vom Provider
  • unterschiedliche Backup-Intervalle und -Strategien konfigurierbar
  • einfache manuelle Durchführung möglich(wenn es mal schnell gehen muss)
  • problemlose Spiegelung der Daten auf andere Server
  • einfaches und schnelles Zrückspielen möglich
  • keine Lizenzkosten, die Software ist unter den "Freeware"-Lizenzbedingungen GPL v2.0 veröffentlicht

 

 

Welche Daten müssen bei einem TYPO3 Backup gesichert werden?

Für ein vollständiges TYPO3 Backup sind in der Regel folgende Daten zu sichern:

  • die Datenbank
  • das Webrootverzeichnis
  • das Unterverzeichnis "fileadmin" im TYPO3-Ordner
  • das Unterverzeichnis "typo3conf" im TYPO3-Ordner
  • das Unterverzeichnis "uploads" im TYPO3-Ordner

Da TYPO3 selbst in nahezu jeder Version zum Download zur Verfügung steht, ist eine komplette Sicherung des typo3-Ordners nicht erforderlich.

Was macht das TYPO3-Backup-Programm?

Bei dem Programm handelt es sich um ein Bash-Skript, das unter einer geeigneten Unix-Umgebung läuft.

Es können 2 verschiedene Arten von Datensicherungen vorgenommen werden:

  • nur die TYPO3 Datenbank(Aufruf mit Parameter "-d")
  • TYPO3 Datenbank und alle Dateien(Standardaufruf)

Die Daten werden in eimen (tar-)Archiv zusammengfasst und dann passwortgeschützt komprimiert. Abschließend wird eine Mail an eine hinterlegte Adresse geschickt, die die wichtigsten Daten und ggf. augetretene Fehler enthält:

Bsp.:

backup scope: database and files
number of errors in errorlog: 1 (see below)
size of database dump: 51M
complete size of backup: 415M
end of backup process: 2021-05-25_15:14:58
---------------------------------------------------------------------
Warning: Using a password on the command line interface can be insecure.

Eine Spiegelung der Daten, um dann auch unabhängig von der Serververfügbarkeit zu sein, ist ebenfalls kein Problem. Die Dateien können jederzeit über eine sichere Verbindung auf andere Server gespielt werden. Der Passwortschutz bietet eine zusätzliche Sicherheit und gewährleistet, dass nur befugte Mitarbeiter Zugriff auf die Daten haben.

Backup-Strategien

Das Backup-Programm kann mit entsprechenden Kenntnissen in der Shellprogrammierung nahezu jede Backupstrategie abbilden.

Standardmäßig ist folgendes Konzept vorgesehen:

  • es wird zwischen zwei Archiven unterschieden: ein Archiv, dass nur die Datenbank enthält, und ein Archiv das sowohl die Datenbank als auch alle Dateien enthält
  • auf dem Webserver befinden sich(außerhalb des Rootpfades, also nicht über das Web erreichbar) zu diesem Zweck zwei korrespondierende Unterverzeichnisse "db" und "all".
  • da sich die Datenbank wesentlich dynamischer entwickelt als der Bestand an Dateien und letztere i.d.R. meistens ohnehin lokal auf einem Rechner vorliegen, sollte die Datenbank mindestens täglich gesichert werden. Wir empfehlen einen Zeitpunkt um die Mittagszeit, da dies meisten Provider eine nächtliche Sicherung durchführen reduziert sich ein potenzieller Datenverlust auf maximal ca. 12 Stunden.
  • die Datenbanksciherung wird 7 Tage vorgehalten und danach vom Programm beim nächsten Lauf gelöscht.  Dieser Wert ist beliebig und kann je nach Sicherungsgröße und Serverkapazität beliebig geändert werden.
  • eine Komplettsicherung sollte in Anbetracht der Größe eher seltener stattfinden und dafür länger vorgehalten werden. Standardmäßig vorgesehen sind monatliche Sicherungen, die drei Monate vorgehalten werden. Auch hier handelt es sich um beliebig gewählte Werte, die ohne Probleme geändert werden können.

Hinweis:
Bitte beachten Sie, dass die Datensicherungen ggf. persönliche Daten enthalten(z.B. Formulardaten). Diese dürfen aus Datenschutzgründen i.d.R. nur eine gewisse Zeit gespeichert werden(siehe hierzu auch TYPO3 und DSGVO)

 

Preise und Kosten

Das Programm ist unter der GNU General Public License lizensiert und wird somit kostenlos zur Verfügung gestellt. Für die Installation berechnen wir folgende Kosten:

Unsere Leistung Non-Profit Kommerziell
Installation, Umsetzung einer Backup-Strategie, Test und Inbetriebnahme 390,00 € 450,00 €
Spiegelung der Daten auf einen weiteren Server 195,00 € 225,00 €

Installation, Konfiguration Backup-Strategie, Test & Inbetriebnahme
Non-Profit: 390,00 €
Kommerziell: 450,00 €
Spiegelung der Daten auf einen weiteren Server
Non-Profit: 195,00 €
Kommerziell 225,00 €

Code

Sie können den unten stehenden Code verwenden und anpassen. Bitte beachten Sie die Bestimmungen der GNU GPL Lizenz. Inbesondere:

  • ist eine Garantie auf die Funktionsfähigkeit ausgeschlossen
  • ist jegliche Haftung ausgeschlossen
  • muss der Copyright-Vermerk erhalten/weitergeführt werden(auch bei Modifikationen)
#!/bin/bash

# Copyright 2021 Oliver Wassenaar (WACON Internet GmbH)

# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more  details: <http://www.gnu.org/licenses/>.

# get command line parameter
for arg in "$@"
do
    case $arg in
        -d|--database)
        DB_ONLY=1
        shift
        ;;
        -n|--nomail)
        NO_MAIL=1
        shift
        shift
        ;;
    esac
done

# config parameter 
sitename=wacon
targetdir=<TARGETDIR>/backup
projectdir=<WEB_ROOTPATH>
backupfile=$sitename$(date +"%Y%m%d")_$$
dbfile=db.sql_$$
logfile=$targetdir/log/log_$$
errorlog=$targetdir/log/error_$$
mailtext=$targetdir/mailtxt_$$

# db credentials
dbname=<DB_NAME>
host=<DB_HOST>
user=<DB_USER>
password=<DB_PASSWORD>


# password of backup file 
zippw=<MYPASSWD>

# comma separated list of mail receiver
mailreceiver="<TO_ADDRESS1>, <TO_ADDRESS2>, ..."
mailsender="<SENDER_ADDRESS>"

# delete all log files older than 30 days
find $targetdir/log -maxdepth 1 -type f -name '*' -mtime +30 -exec rm {} \;

exec 1>>$logfile 2>>$errorlog

echo "Begin backup: $(date +%F_%T)"

# delete all db backups older than 7 days (e.g. to run the db backup every day)
find $targetdir/archive/db -maxdepth 1 -type f -name '*' -mtime +7 -exec rm {} \;

# database dump
mysqldump --opt --no-tablespaces -h$host -u$user -p$password $dbname -r $targetdir/$dbfile

cd $targetdir
tar cvf $backupfile $dbfile 

if ! [[ -n "$DB_ONLY" ]]
then
	# delete all files older than 90 days(in this case you shouldn't run the complete backup too frequently, e.g. once a month)
	find $targetdir/archive/all -maxdepth 1 -type f -name '*' -mtime +90 -exec rm {} \;
	cd $projectdir
	# files of rootpath(e.g. htaccess, favicon, etc.) 
	find . -maxdepth 1 -type f -print0 | xargs -0 tar rf $targetdir/$backupfile

	# important directories (uploads possibly not necessary)
	find fileadmin -type f -print0 | xargs -0 tar rvf $targetdir/$backupfile
	find typo3conf -type f -print0 | xargs -0 tar rvf $targetdir/$backupfile
	find uploads -type f -print0 | xargs -0 tar rvf $targetdir/$backupfile
fi

backupsize=$(du -h $targetdir/$backupfile | awk '{print $1}')
dbsize=$(du -h $targetdir/$dbfile | awk '{print $1}')

# compress files
cd $targetdir
zip -P $zippw $backupfile.zip $backupfile

if ! [[ -n "$DB_ONLY" ]]
then
	backupscope="database and files"
	# move to archive
	mv $backupfile.zip $targetdir/archive/all/
else
        backupscope="database ONLY"
        mv $backupfile.zip $targetdir/archive/db/
fi


#clean up
rm $backupfile
rm $dbfile 


if ! [[ -n "$NO_MAIL" ]]
then
	echo "backup scope: $backupscope" > $mailtext
	errno=$(wc -l $errorlog |  awk '{print $1}')
	echo "number of errors in errorlog: $errno (see below)" >> $mailtext
	echo "size of database dump: $dbsize" >> $mailtext
	echo "complete size of backup: $backupsize"  >> $mailtext
	echo "end of backup process: $(date +%F_%T)"  >> $mailtext
	echo "---------------------------------------------------------------------"  >> $mailtext

	cat $errorlog >> $mailtext

	cat $mailtext | mail -s "Backup: $sitename" $mailreceiver -r$mailsender 

	rm $mailtext
fi

 

 

Noch Fragen?

Sie haben noch Fragen oder wünschen eine kostenlose Beratung? Gerne stehen wir Ihnen als TYPO3 Dienstleister zur Verfügung.