Diese Funktion ist ab Contao 4.13 verfügbar.
Contao liefert alles mit, was du für ein zuverlässiges Datenbank-Backup brauchst. Einmal konfiguriert und du kannst nachts beruhigt schlafen, denn was auch immer mit der Datenbank geschieht, du hast deine Backups und kannst das neuste mit nur einem Befehl direkt wieder einspielen!
Standardmässig werden die Backups in var/backups
gespeichert und dort auch verwaltet. Folgende Befehle stehen dir
für die Verwaltung der Backups zur Verfügung:
Natürlich der wichtigste Befehl. Ohne dass wir ein Backup haben, können wir mit den anderen Befehlen herzlich wenig anfangen. Die einfachste Form der Nutzung erfolgt ohne jegliche Argumente:
php vendor/bin/contao-console contao:backup:create
Fertig. Contao erstellt dir jetzt ein Backup in var/backups
und versieht es mit dem aktuellen Datum und der Uhrzeit.
Standardmässig wird es auch direkt komprimiert, damit nicht unnötig Speicherplatz auf deinem System verschwendet wird.
Backups beginnen immer mit einem beliebigen Namen (standardmässig backup
) und werden vom Datum mit __
getrennt.
Du wirst also eine Datei var/backups
liegen haben, die z. B. so aussieht: backup__20220126153243.sql.gz
.
Wenn du möchtest, kannst du den Namen und somit die Uhrzeit selber beeinflussen, indem du den kompletten Backup-Namen
als Argument angibst. Durch das Weglassen von .gz
deaktivierst du ausserdem bequem die Komprimierung:
php vendor/bin/contao-console contao:backup:create mein_super_backup_name__20220101000000.sql
Jedes Mal, wenn ein neues Backup erstellt wird, räumt Contao veraltete Backups automatisiert auf. Siehe Abschnitt »Konfigurationsmöglichkeiten«.
Dieses Kommando lässt uns die bestehenden Backups anzeigen. Die Ausgabe dürfte ungefähr so aussehen:
--------------------- ----------- -------------------------------
Created Size Name
--------------------- ----------- -------------------------------
2022-01-26 15:32:43 73.14 KiB backup__20220126153243.sql.gz
--------------------- ----------- -------------------------------
Dieses Kommando lässt dich eines der vorhandenen Backups wiederherstellen. Standardmässig wird einfach das jüngste Backup verwendet. Du kannst aber wiederum auch ein bestimmtes Backup angeben:
# Das jüngste Backup
php vendor/bin/contao-console contao:backup:restore
# Ein bestimmtes Backup
php vendor/bin/contao-console contao:backup:restore backup__20220126153243.sql.gz
Dadurch, dass Contao das Backup-Verzeichnis automatisch verwaltet, kannst du mittels eines Cronjobs deine Backups
zu einem beliebigen Zeitpunkt erstellen lassen. Wie wäre es beispielsweise immer abends um 23:10 Uhr? Ein Eintrag
in der crontab
könnte dann so aussehen:
10 23 * * * /pfad/zum/system/vendor/bin/contao-console contao:backup:create
Konfigurieren lässt sich sowohl, welche Datenbanktabellen bei einem Backup ignoriert werden sollen, wie auch die sog. »Retention Policy«, also wie bzw. bis wann, ältere Backups noch gespeichert bleiben.
Die Standardeinstellungen lauten wie folgt:
# config/config.yaml
contao:
backup:
ignore_tables: ['tl_crawl_queue', 'tl_log', 'tl_search', 'tl_search_index', 'tl_search_term']
keep_max: 5
keep_intervals: ['1D', '7D', '14D', '1M']
Es werden also die konfigurierten Tabellen bei einem Backup ignoriert und maximal 5
Backups zurückbehalten.
Allerdings nicht die neusten fünf, sondern gem. der keep_intervals
Konfiguration. Mittels keep_intervals
kannst du
eine beliebige Anzahl Intervalle definieren. Für jedes dieser Intervalle wird dann das jeweils älteste Backup behalten.
Hast du also wie in diesem Artikel aufgezeigt einen Cronjob definiert, der täglich ein Backup auslöst, dann werden
standardmässig 5 Backups behalten. Und zwar
1D
= jetzt - 1 Tag)7D
= jetzt - 7 Tage)14D
= jetzt - 14 Tage)1M
= jetzt - 1 Monat)Zur Verfügung stehen die folgenden Bezeichner:
Y
für JahreM
für MonateD
für TageW
für WochenH
für StundenM
für MinutenS
für SekundenZeitelemente (H
, M
und S
) müssen dabei mit dem Präfix T
versehen werden. Ansonsten hätte M
eine doppelte
Bedeutung. 5 Stunden wären also nicht 5H
sondern T5H
.
Bezeichner können auch kombiniert werden: Ein Jahr, zwei Monate und 5 Stunden wäre 1Y2MT5H
. Weitere Informationen
können der PHP-Dokumentation entnommen werden. Der dort
dokumentierte Präfix P
kann weggelassen werden. Dieser
muss ohnehin immer hinzugefügt werden, entsprechend macht das Contao automatisch für dich.
Beachte, dass wenn du sowohl keep_max
als auch keep_intervals
konfigurierst, sollte keep_max
immer mind. 1 grösser
sein, als die Anzahl der keep_intervals
(das neuste plus pro Interval das älteste). keep_max
gewinnt immer. Es dient
als eine Art Sicherheitseinstellung, so dass niemals mehr als keep_max
Backups zurückbehalten werden.