FHEM Tutorial-Reihe - Part 46: DbRep-Integration / mySQL-Backup auf NAS

Mit ** gekennzeichne Links auf dieser Seite sind Affiliatelinks.

Wenn Du meine letzten Videos gesehen hast, dann weißt Du, dass zwar alles im Backup enthalten ist, aber noch eine einzelne Komponente fehlt: Die Datenbank. Diese Lücke schließe ich in diesem Video. Mit DBRep wird dabei direkt aus FHEM heraus automatisch ein Datenbank-Backup erstellt und auf ein NAS verschoben. Wenn man es weniger komplex möchte, kann man auch einfach einen USB-Stick oder eine SD-Karte nutzen um die Backups auf dieses Ziel zu speichern. Wichtig ist einfach nur, dass man das Backup nicht auf dem gleichen Speichermedium ablegt, welches man eigentlich sichern möchte. Logisch, oder?

Was wird benötigt?

  • Eine FHEM-Installation
  • Konfiguriertes Datenbank-Logging
  • Ein Synology-NAS (optional)

Video

FHEM-Kurs

Befehle

Besonders wichtig ist, dass das DB-Logging von FHEM in den async-Modus versetzt wird. Ansonsten blockiert der Datenbank-Dump das komplette FHEM-System. Gerade, wenn man FHEM auf einem Raspberry Pi betreibt, ist es eine gute Idee das Logging auf Async umzustellen. Denn dadurch wird die SD-Karte ebenfalls entlastet, welche beim Raspberry Pi eindeutig der Schwachpunkt ist.

attr DBLogging asyncMode 1
attr DBLogging cacheLimit 100
attr DBLogging syncInterval 15

define DBLogging_DbRep DbRep DBLogging
attr DBLogging_DbRep DbLogExclude .*
attr DBLogging_DbRep DbLogInclude DumpRowsHistory
attr DBLogging_DbRep dumpFilesKeep 1
attr DBLogging_DbRep event-on-update-reading state,DumpRowsHistory
attr DBLogging_DbRep executeAfterDump set WEB_Pushover msg 'mySQL' 'Der Dump wurde erfolgreich erstellt'
attr DBLogging_DbRep executeBeforeDump set DBLogging commitCache
attr DBLogging_DbRep optimizeTablesBeforeDump 1

define DBLogging_ZeilenHistorie SVG DBLogging:DBLogging_ZeilenHistorie:Current

define at_DbLoggingDump at *04:00:00 set DBLogging_DbRep dumpMySQL clientSide

Wenn dieser Teil fertig ist, kann man mit einem USB-Stick als Backup-Ziel eigentlich schon aufhören. Dann ist alles getan was man braucht. Allerdings wollte ich die Backups auf meinem NAS ablegen, da ich dort gesammelt alle Arten von Backups ablege. Also auch von meinem Webserver usw.

Dazu muss man als erstes einen RSA-Key genrieren (falls noch nicht geschehen). Sollte man FHEM normal installiert haben, muss man diesen Befehl als FHEM-User ausführen, damit dieser auch Zugriff auf den erstellten Key hat. Wie im Video gezeigt, vergebe ich für diese Keys kein Passwort.

ssh-keygen -t rsa -b 4096 -C "your-email@example.com"

Die folgende Konfiguration muss man auf dem NAS vornehmen. Für jedes andere Linux-System als Ziel funktioniert eigentlich alles genauso. Nur die Pfade sollten dann entsprechend angepasst werden.

vi /etc/ssh/sshd_config

PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

cd /volume1/homes/backup

mkdir .ssh
touch .ssh/authorized_keys

chmod 755 .
chmod 700 .ssh
chmod 644 .ssh/authorized_keys

Zum testen können wir dann von FHEM aus die folgenden Befehle verwenden. Der Name für das Backup muss natürlich auch angepasst werden.

ssh backup@192.168.178.25
scp ./log/fhem_2017_11_27_12_19.sql backup@192.168.178.25:/volume1/homes/backup/fhem/

Damit das Ganze automatisiert abläuft, habe ich diese kleine Funktion für FHEM geschrieben. Diese wird in der 99_myUtils abgelegt.

sub backupSqlFiles($) {
    my ($devspec) = @_;

    my $file = ReadingsVal($devspec, "DumpFileCreated", "");
    if ($file ne "") {
        system("scp $file backup\@192.168.178.25:/volume1/homes/backup/fhem/ &");
        fhem("set WEB_Pushover msg 'mySQL' 'Der Dump wurde erfolgreich erstellt ($file)'");

        return 1;
    }

    return 0;
}

Zum Test kann diese dann einmal aufgerufen werden. Fertig. Ab jetzt wird jede Nacht automatisch ein Backup der Datenbank erstellt und auf das NAS geschoben. Natürlich kann man die Intervalle auch verkürzen. Ich halte dies allerdings für nicht notwendig, da es sich ja "nur" um Log-Daten handelt. Zur Not fehlt mir eben ein Tag dieser Daten im Ernstfall.

{backupSqlFiles("DBLogging_DbRep")}

Newsletter

Trage Dich jetzt in den Newsletter ein und genieße dadurch viele Vorteile:

  • 5€-Gutschein als Dankeschön
  • Zugang zu exklusiven Inhalten
  • Rabattaktionen für Kurse
  • Angebote für Produkte

* Durch Angabe meiner E-Mail-Adresse erkläre ich mich damit einverstanden, dass mir regelmäßig Informationen und Produktempfehlungen aus dem Fachgebiet Smart Home zugesendet werden. Mit dem Eintrag akzeptieren Sie unsere Datenschutzbestimmungen. Meine Einwilligung kann ich jederzeit widerrufen.

Matthias Kleine

Matthias Kleine

Großer Fan und Anhänger von OpenSource-Projekten und erweiterbaren Haus-Automatisierungskomponenten. Je offener und flexibler das System, desto besser. Ich lege mich ungern auf einzelne Protokolle oder Standards fest, sondern probiere aus allen Welten das Beste zu verheiraten. Unterwegs als Softwareentwickler, Trainer und Blogger im Bereich Smart Home.

Auf YouTube und hier im Blog gibt es bereits unzählige kostenlose Videos, Informationen und Tutorials. Wenn Dir das noch nicht reicht, ist ein Training genau das richtige für Dich! Die folgenden Trainings haben den Vorteil, dass immer von Anfang an gestartet wird und Du ohne Vorwissen teilnehmen kannst.