Damit Ihr diese Anleitung verwenden könnt, solltet Ihr zuerst das allgemeine FHEM Backup konfigurieren. Direkt danach könnt Ihr hier weiter machen.

Vorbereitungen

Zum Erstellen des MariaDB Backups werden System Befehle benötigt. Damit der FHEM Benutzer Benutzer "fhem" später über sudo Befehle ausführen darf, müsst Ihr diesen zuerst konfigurieren. Hierfür müsst Ihr in die Datei "/etc/sudoers" folgende Zeile hinzufügen:

fhem ALL=(ALL) NOPASSWD: ALL

Die Datei "etc/sudoers" könnt Ihr über folgenden Befehl editieren:

sudo nano /etc/sudoers

FHEM Backup

Damit der FHEM Server das Backup automatisch erstellt, müsst Ihr hierfür ein FHEM Device anlegen. Mit folgendem Befehl könnt Ihr das automatische Backup anlegen:

define MariaDB.Backup at *23:59:00 {}
attr MariaDB.Backup room ZZ_FHEM
attr MariaDB.Backup group Backup

 

Als Ergebnis bekommt Ihr ein Device, mit dem jede Nacht um 23:59 ein Backup der MariaDB FHEM Datenbank erstellt wird.

 

Speichern nicht vergessen!

Damit das neu FHEM Device auch etwas tun kann, müsst Ihr den Bereich DEF noch abändern. Hierfür könnt Ihr folgendes Skript verwenden:

*23:59:00  {
        # Backup Variablen definieren
        my $BackupDir      = AttrVal("global", "backupdir", "/mnt/gibtesnicht") ."/MariaDB/";
        my $BackupReadings = "MariaDB.Backup";
        my $BackupDBName   = "fhem";
        my $BackupHostName = "localhost";
        my $BackupHostPort = "3306";
        my $BackupBenutzer = "root";
        my $BackupKennwort = decode_base64("MTIzNDU2");
        my $BackupMax      = 10;
        my $BackupLog      = 1;
        my $BackupDel      = 1;
                
        Log3 "MariaDB.Backup", 3, "MariaDB.Backup Backup Verzeichnis = $BackupDir" if ($BackupLog == 1);
        
        # Backup Dateiname definieren & anlegen
        my $BackupFile = "MariaDB-$year" . sprintf("%02d",$month) . sprintf("%02d",$mday) . "_" . sprintf("%02d",$hour) . sprintf("%02d",$min) . sprintf("%02d",$sec) . ".sql"  ;
        
        if (!-e "$BackupDir/$BackupFile") {
                open(IN,'>'."$BackupDir/$BackupFile");
                close IN;
        }

        # Backup starten        
        system ("sudo mysqldump --databases $BackupDBName --host=$BackupHostName --password=$BackupKennwort --user=$BackupBenutzer --port=$BackupHostPort> $BackupDir/$BackupFile &");
        
        # Alte Backupdate bereinigen
        opendir (DIR, $BackupDir) or die $!;
        
        # Daten sortieren
        my @files = sort { $b cmp $a } readdir(DIR);

        closedir(DIR);

        my $BackupCount = 0;    
        while (my $file = shift @files) {
                if ($file ne "." && $file ne "..") {
                        $BackupCount++;
                        Log3 "MariaDB.Backup", 3, "MariaDB.Backup [" . sprintf("%02d",$BackupCount). "] gefundenes Backup = $file" if ($BackupLog == 1);
                        fhem ("setreading $BackupReadings found_backup_". sprintf("%02d",$BackupCount). " " . $file);
                        if ($BackupCount > $BackupMax) {
                                Log3 "MariaDB.Backup", 3, "MariaDB.Backup [" . sprintf("%02d",$BackupCount). "] Backup = $file LÖSCHEN" if ($BackupLog == 1);
                                unlink ($BackupDir . "/" . $file)  or die $! if ($BackupDel == 1);
                                fhem ("setreading $BackupReadings delete_backup " . $file);
                        }                       
                }
    }
}

 Das Ergebnis sollte dann ungefähr so aussehen:

Damit das Skript auch aktiv etwas ausführt, müsst Ihr im oberen Bereich die Variablen anpassen. Folgende Konfiguration ist hier möglich:

Name Mögliche Werte Beschreibung
$BackupDir [STRING]

Hier sollte nichts angepasst werden. Das Backupverzeichnis wird direkt auf dem FHEM Device "global" ausgelesen. Eine Anpassung ist nur dann nötig, wenn Ihr nicht die Anleitung von mir benutzt habt.

$BackupReadings [STRING]

Hier könnt Ihr das FHEM Device angeben, in welchem die gefundenen und das gelöschte Backup als Reading abgelegt wird. Eine Anpassung ist nur dann nötig, wenn Ihr nicht die Anleitung von mir benutzt habt.

$BackupHostName [STRING]

Hier müsst Ihr die IP-Adresse des MariaDB Servers angeben. Wenn der MariaDB Server auf dem selben Rechner läuft wie Euer FHEM Server, dann müsst Ihr hier nichts verändern.

$BackupHostPort [STRING]

Hier müsst Ihr den Port des MariaDB Servers angeben. Bei einer Standardinstallation sollte der vorbelegte Port 3306 passen.

$BackupBenutzer [STRING]

Hier müsst Ihr den Benutzernamen des MariaDB Server angeben. In einer Standardinstallation könnt Ihr den Benutzer "root" verwenden.

$BackupKennwort [STRING]

Hier müsst Ihr das Kennwort des Benutzers angeben. Wenn Ihr das Kennwort im Klartext verwendet wollt, müsst Ihr den Eintrag "decode_base64("MTIzNDU2")" durch Euer Kennwort ersetzen. Wenn Ihr ein verschlüsseltes Kennwort hinterlegen wollt, müsst Ihr nur den roten Bereich "decode_base64("MTIzNDU2")" ersetzen. Das Erstellen einen verschlüsselten Kennwort wird hier beschrieben.

$BackupMax [NUMERIC]

Hier könnt Ihr die maximale Anzahl der Backups definieren, welche vorgehalten werden sollen. 

$BackupLog
  • 0
  • 1

Hier kann das Erstellen von LOG Einträgen aktiviert werden. Gerade in der Einführungsphase ist es ggf. Interessant, was das Skript alles gefunden bzw. gelöscht hat.

 

$BackupDel

  • 0
  • 1
Hier kann das Löschen der Backups aktiviert werden. Wenn dieser Wert auf "0" gesetzt wurde, werden keine Backupdateien gelöscht. Damit ist es möglich, das Skript erst mal laufen zu lassen, ohne gleich Daten zu löschen. Im Log könnt Ihr dann schauen, welche Dateien das Skript gelöscht hätte.

Das Skript legt bei jeder Ausführung diverse Readings an. Folgende Readings gibt es hier aktuell:

Name Mögliche Werte Beschreibung
delete_backup [STRING]

Hier wird die zuletzt gelöschte Backupdatei angezeigt. 

found_backup_XX [STRING]

Hier wird jede gefundene Backupdatei angezeigt. Der Bereich "XX" wird immer durch eine zweistellige Nummer ersetzt.

Kennwort Verschlüsseln

Das Kennwort des MariaDB Benutzers kann verschlüsselt im Skript abgelegt werden. Hierfür müsst Ihr zuerst ein BASE64 Schlüssel erstellen. Um diesen Schlüssel zu erstellen müsst Ihr folgenden Befehl ausführen:

echo -n 123456 | base64

Das Ergebnis sieht dann so aus:

Kommentar schreiben

Kommentare: 0