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:


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:

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:

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:

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 LeistungNon-ProfitKommerziell
Installation, Umsetzung einer Backup-Strategie, Test und Inbetriebnahme390,00 €450,00 €
Spiegelung der Daten auf einen weiteren Server195,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 €
Kommerziell225,00 €


Code

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

#!/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.