Inhaltsverzeichnis

Wie bereits erwähnt, habe ich meine Daten seither in eine SQLite Datenbank geschrieben. Da ich diese Daten weiterhin behalten möchte, habe ich diese wie folgt in die MariaDB importiert:

Vorbereitungen

Damit Ihr Eure SVG Plots nicht nach der Migration anpassen müsst, müsst Ihr das FHEM DBLog Device erstmal umbenennen. Hierfür könnt Ihr den FHEM Befehl "rename" verwenden. Zusätzlich solltet Ihr das FHEM DBLog Device so anpassen, dass es keine Daten mehr sammelt. Hierfür könnt Ihr den FHEM Befehl "defmod" verwenden. Mit folgenden Beispiel-Befehlen könnt Ihr diese Aktionen durchführen:

rename fhem.dblog fhem.dblog.old
defmod fhem.dblog.old DbLog ./sqlite.conf 1234:5678

Jetzt sollte Ihr gleich das neue FHEM DBLog Device anlegen. Damit Eure SVG Plots direkt wieder funktionieren, solltet Ihr hier natürlich den alten FHEM Namen verwenden. Eine Anleitung zum Verbinden der neuen MariaDB, findet Ihr hier.

Daten - Exportieren

Um die Daten der alten Datenbank zu exportieren, verbindet Ihr Euch per SSH mit dem FHEM Server. Zum Exportieren müsst Ihr folgende Schritte machen:

  • Wechseln in das Verzeichnis, in welcher Eure SQLite DB liegt
  • Perl Skript erstellen
  • SQL Export erstellen
  • SQL Export in MariaDB Format wandeln

Als erstes wechselt Ihr in das Verzeichnis in welcher eure Datenbank liegt. Dort erstellt Ihr dann das Perl Skript. Folgende Befehle müsst Ihr dafür ausführen:

cd /opt/fhem
sudo nano changesql.pl

Jetzt könnt Ihr den Inhalt des Perl Skriptes in den Nano Editor kopieren, und die Datei abspeichern.

#! /usr/bin/perl

while ($line = <>){
    if (($line !~  /BEGIN TRANSACTION/) && ($line !~ /COMMIT/) && ($line !~ /sqlite_sequence/) && ($line !~ /CREATE UNIQUE INDEX/) && ($line !~ /PRAGMA foreign_keys=OFF/)){

        if ($line =~ /CREATE TABLE \"(\w*)\"(.*)/){
            $name = $1;
            $sub = $2;
            $sub =~ s/\"//g;
            $line = "DROP TABLE IF EXISTS $name;\nCREATE TABLE IF NOT EXISTS $name$sub\n";
        }
        elsif ($line =~ /INSERT INTO \"(\w*)\"(.*)/){
            $line = "INSERT INTO $1$2\n";
            $line =~ s/\"/\\\"/g;
            $line =~ s/\"/\'/g;
        }else{
            $line =~ s/\'\'/\\\'/g;
        }
        $line =~ s/([^\\'])\'t\'(.)/$1THIS_IS_TRUE$2/g;
        $line =~ s/THIS_IS_TRUE/1/g;
        $line =~ s/([^\\'])\'f\'(.)/$1THIS_IS_FALSE$2/g;
        $line =~ s/THIS_IS_FALSE/0/g;
        $line =~ s/AUTOINCREMENT/AUTO_INCREMENT/g;
        $line =~ s/(.*)varchar([^\(0-9\)].*)/$1varchar\(255\)$2/g;
        print $line;
    }
}

Mit folgendem Befehl könnt Ihr jetzt die SQLite Daten exportieren. Die Position "fhemsql3.db" müsst Ihr mit dem Namen Eurer Datenbank ausfüllen.

sudo sqlite3 fhemsql3.db .dump > export.sql

Nachdem die Daten erfolgreich exportiert wurden, müsst Ihr die Daten jetzt noch in ein MariaDB konformes Format umwandeln. Hierfür führt ihr folgenden Befehl aus:

sudo perl changesql.pl export.sql > import.sql

Daten - Importieren

Als letzten Schritt müsst Ihr die Daten jetzt in Eure MariaDB importieren. Hierfür müsst Ihr folgenden Befehl ausführen. An der Position "-h" müsst Ihr die IP-Adresse Euers MariaDB Server eintragen. Falls Ihr den Port Eures MariaDB Server angepasst habt, müsst Ihr die Position "-P" ebenfalls abändern.

sudo mysql -h 10.10.0.245 -P 3306 -u root -f -p fhem < import.sql

Das Ergebnis sollte dann ungefähr so aussehen:

 

Damit ist dann die Migration der Daten abgeschlossen.

Zum Abschluss könnt Ihr über die folgenden Befehle noch die temporären Dateien löschen:

sudo rm import.sql
sudo rm export.sql
sudo rm changesql.pl