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

Mit ** gekennzeichnete Links auf dieser Seite sind Affiliatelinks.

FHEM Tutorial-Reihe - Part 46: DbRep-Integration / mySQL-Backup auf NAS
FHEM Tutorial-Reihe - Part 46: DbRep-Integration / mySQL-Backup auf NAS
  • Matthias Kleine
  • 27.11.2017
  • mySQL
  • Optimierung

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?

Achtung: Dieser Inhalt wurde vor mehreren Jahren aufgenommen und ist nicht mehr aktuell! Es ist nicht empfohlen nach dieser Anleitung vorzugehen.

Was wird benötigt?

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

Video

Hausbau-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")}
Du willst mehr?

Smart-Home-Trainings von A-Z

Steig noch tiefer in die Themen ein und meistere Deine Projekte! Über 13.000 Teilnehmer konnten sich schon von der Qualität der Online-Kurse überzeugen.

ioBroker-Master-Kurs

ioBroker-Master-Kurs

Mehr Infos
Hausbau-Kurs

Hausbau mit KNX

Mehr Infos
Lox-Kurs

Lox-Kurs

Mehr Infos
Node-RED-Master-Kurs

Node-RED-Master-Kurs

Mehr Infos