FHEM Tutorial-Reihe - Part 46: DbRep-Integration / mySQL-Backup auf NAS
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
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")}