Erstellen von Datensicherungen
Die beiden Datenbanken von SOLECTRUS (PostgreSQL und vor allem InfluxDB) sammeln Daten, die man nicht verlieren möchte. Daher ist es wichtig, regelmäßig Sicherungen zu erstellen.
Es stehen dafür Scripte zur Verfügung, die die Sicherung manuell oder automatisiert durchführen.
Herunterladen der Scripte
Vor dem Gebrauch müssen die Scripte einmalig heruntergeladen und ausführbar gemacht werden. Dies muss im Verzeichnis ausgeführt werden, indem bereits die Dateien .env
und compose.yaml
liegen:
cd /pfad/zu/solectrus
curl -o backup.sh https://raw.githubusercontent.com/solectrus/backup-restore/refs/heads/main/backup.sh
curl -o restore.sh https://raw.githubusercontent.com/solectrus/backup-restore/refs/heads/main/restore.sh
chmod +x backup.sh restore.sh
Manchmal werden die Scripte aktualisiert. Um die neueste Version zu erhalten, sind die beiden curl
-Befehle erneut auszuführen.
Erstellen einer Datensicherung
Das Erstellen einer Sicherung erfolgt durch das Script backup.sh
. Es erstellt eine Sicherung beider Datenbanken in eine Datei, die nach dem Datum benannt ist.
./backup.sh
Das Backup wird im laufenden Betrieb erstellt. Es muss (und darf) kein Container gestoppt werden. Das Ergebnis ist eine Datei wie solectrus-backup-2024-10-06.tar.gz
. Das Script zeigt eine Ausgabe wie folgt:
SOLECTRUS Backup Script
Checking if PostgreSQL and InfluxDB containers are running...
Ok, PostgreSQL and InfluxDB containers are both running.
Creating PostgreSQL backup...
PostgreSQL backup saved as solectrus-postgresql-backup-2024-10-06.sql.gz (4.0K)
Creating InfluxDB backup...
2024/10/06 11:49:15 INFO: Downloading metadata snapshot
2024/10/06 11:49:15 INFO: Backing up TSM for shard 33
2024/10/06 11:49:15 INFO: Backing up TSM for shard 34
2024/10/06 11:49:15 INFO: Backing up TSM for shard 35
2024/10/06 11:49:15 INFO: Backing up TSM for shard 36
2024/10/06 11:49:15 INFO: Backing up TSM for shard 37
2024/10/06 11:49:15 INFO: Backing up TSM for shard 38
2024/10/06 11:49:15 INFO: Backing up TSM for shard 39
2024/10/06 11:49:15 INFO: Backing up TSM for shard 40
Successfully copied 137kB to /home/ledermann/solectrus/solectrus-influxdb-backup-2024-10-06.tar.gz
InfluxDB backup saved as solectrus-influxdb-backup-2024-10-06.tar.gz (136K)
Combined backup saved as solectrus-backup-2024-10-06.tar.gz (136K)
Backup process completed.
Die Sicherung kann optional auf einem anderen Speicherort gespeichert werden. Dazu wird der Pfad als Parameter übergeben:
./backup.sh --backup-dir /pfad/zum/zielverzeichnis
Außerdem kann dafür gesorgt, dass nur eine begrenzte Anzahl von Sicherungen aufbewahrt wird. Dazu wird die Anzahl ebenfalls als Parameter übergeben:
./backup.sh --retentation-days 10
Automatisieren der Datensicherung
Die Sicherung kann auch automatisiert werden, indem das Script in einem Cronjob aufgerufen wird.
-
Cron-Tabelle öffnen:
crontab -e
-
Ergänze folgende Zeile und speichere die Änderung:
0 2 * * * cd /pfad/zu/solectrus && ./backup.sh --backup-dir /pfad/zum/zielverzeichnis --retention-days 10
-
Prüfen ob der Cronjob korrekt hinzugefügt wurde:
crontab -l
Wiederherstellen einer Datensicherung
Das Wiederherstellen einer Sicherung läuft ähnlich ab. Es wird das Script restore.sh
verwendet, das alle Schritte automatisiert. Auch hier muss (und darf) kein Container manuell gestoppt werden. Das Script übernimmt das und startet die Container nach der Wiederherstellung wieder.
Das Script wird mit dem Pfad zur Backup-Datei als Parameter aufgerufen:
./restore.sh <BACKUP_DATEI>
Da eine Wiederherstellung den aktuellen Zustand der Datenbanken überschreibt, wird aus Sicherheitsgründen vor dem Wiederherstellen eine Bestätigung eingeholt. Die Ausgabe des Scripts sieht wie folgt aus:
SOLECTRUS Restore Script
Validating backup files in solectrus-backup-2024-10-06.tar.gz...
Ok, backup file contains backups for both PostgreSQL and InfluxDB.
Checking if PostgreSQL, InfluxDB, and Redis containers are running...
Ok, PostgreSQL, InfluxDB, and Redis containers are all running.
WARNING: This will overwrite all existing data in PostgreSQL and InfluxDB!
Are you sure you want to continue? Type 'yes' to proceed: yes
Checking running containers...
Stopping all containers except PostgreSQL, InfluxDB, and Redis...
[+] Stopping 4/4
✔ Container solectrus-senec-collector-1 Stopped
✔ Container solectrus-dashboard-1 Stopped
✔ Container solectrus-power-splitter-1 Stopped
✔ Container solectrus-watchtower-1 Stopped
All other containers stopped.
Extracting backup files from solectrus-backup-2024-10-06.tar.gz...
Extraction completed.
Restoring PostgreSQL backup...
PostgreSQL restore completed successfully.
Restoring InfluxDB backup...
ID Name Retention Shard group duration Organization ID Schema Type Deleted
8617308794b3e561 solectrus infinite 168h0m0s a161178df503af35 implicit true
Successfully copied 137kB to 4ee52044437a271f0b7fa0bb9a09a7ed5cd6b756b0bfdbb8081a8d29596b6dd8:/tmp/
2024/10/06 11:50:39 INFO: Restoring bucket "8617308794b3e561" as "solectrus"
2024/10/06 11:50:40 INFO: Restoring TSM snapshot for shard 41
2024/10/06 11:50:40 INFO: Restoring TSM snapshot for shard 42
2024/10/06 11:50:40 INFO: Restoring TSM snapshot for shard 43
2024/10/06 11:50:40 INFO: Restoring TSM snapshot for shard 44
2024/10/06 11:50:40 INFO: Restoring TSM snapshot for shard 45
2024/10/06 11:50:40 INFO: Restoring TSM snapshot for shard 46
2024/10/06 11:50:40 INFO: Restoring TSM snapshot for shard 47
2024/10/06 11:50:40 INFO: Restoring TSM snapshot for shard 48
InfluxDB restore completed.
Flushing Redis...
OK
Redis cache flushed successfully.
Restarting previously running containers...
[+] Running 7/7
✔ Container solectrus-watchtower-1 Started
✔ Container solectrus-influxdb-1 Healthy
✔ Container solectrus-redis-1 Healthy
✔ Container solectrus-postgresql-1 Healthy
✔ Container solectrus-power-splitter-1 Started
✔ Container solectrus-dashboard-1 Started
✔ Container solectrus-senec-collector-1 Started
Previously running containers restarted.
Restore process completed.
Quelltext
Die Scripte sind in Bash implementiert, der Quelltext ist auf GitHub verfügbar:
github.com/solectrus/backup-restore