Leitfaden zur Umstellung auf das Database Plugin in Kombination mit MySQL/MariaDB

Motivation

Das Database Plugin setzt auf einer Neuimplementierung der Datenbankanbindung auf, bei der nicht wie beim bisherigen SQLite Plugin alte Daten „aufgeräumt“ werden, sondern jeder Datensatz behalten wird. Dies kann zu sehr großen Datenbeständen führen, für die eine „echte“ Datenbank wie MySQL oder MariaDB sinnvoller ist. Auch können diese Datenbanken mit PhpMyAdmin sehr leicht administriert / betrachtet werden.

Wichtig: Eine Nutzung mit SQLite ist auch weiterhin mit dem Database Plugin möglich, so dass ein Wechsel zu anderen Datenbanken nicht zwingend notwendig ist.

Dieser Leitfaden soll trotzdem dazu dienen, den Umstieg zu erleichtern und motivieren.

Installation von MariaDB

Eine sinnvolle Alternative zu SQLite ist Maria DB (ein Fork von MySQL). Mit dem Database Plugin sind jedoch auch andere Datenbanken mit Kompatibilität zur Python DB API 2 möglich. Auch das klassische MySQL kann verwendet werden.


sudo apt-get update
sudo apt-get install mariadb-server
# alternativ
# sudo apt-get install mysql-server

Die Installationsroutine fordert dabei zur Eingabe eines Passworts für den User „root“ auf. Hier ist darauf zu achten, ein möglichst sicheres Passwort zu wählen.

Einrichtung einer DB und eines DB Users für SmartHomeNG

Als nächstes sollte eine eigene MariaDB Datenbank mit eigenem User für SmartHomeNG erstellt werden, da die Verwendung des Root Users aus Sicherheitsgründen (globale root Rechte) nicht zu empfehlen ist.

Dazu sollte wie folgt vorgegangen werden:

Einloggen in MariaDB als root (befehl „mysql“) mit vergebenem Passwort


mysql -u root -p

Datenbank / User für SmartHomeNG erstellen

In der nun folgenden Shell – jede Zeile mit den jeweiligen Werten befüllen und mit ENTER bestätigen:


CREATE DATABASE smarthome_db;
CREATE USER 'smarthome'@'«ip of your SmartHomeNG server»' IDENTIFIED BY '«password»';
GRANT ALL PRIVILEGES ON smarthome_db.* TO 'smarthome'@'«ip of your SmartHomeNG server»';
FLUSH PRIVILEGES;

Wichtig: Falls die Datenbank auf dem gleichen Server wie SmartHomeNG betrieben wird, muss anstatt der IP die 127.0.0.1 und ggf. localhost via jeweiligen GRANT ALL ... Statements freigegeben werden.

(Optional) Prüfen der Einstellungen:

Auf die Datenbank lokal als root einloggen, mysql -u root -p. Mittels show databases; kann man nun prüfen, ob eine Datenbank namens smarthome_db erstellt wurde. Der neue User ist in der Datenbank mysql in der Tabelle users zu finden:


use mysql;
select Host, User from user;

Im Output sollte nun eine Zeile mit IP des SmartHomeNG Servers und dem User „smarthome“ sichtbar sein.

Die vergebenen PRIVILEGES auf die smarthome_db sind via


select Host, Db, USer from db; 

zu sehen. Auch hier sollten der Username, die IP und die Datenbank auftauchen.

Mit exit geht es zurück zur Shell.

SmartHomeNG und Datenbank auf getrennten Maschinen/IPs

Sind SmartHomeNG und Datenbank getrennt, muss zusätzlich der Eintrag bind-address in der /etc/mysql/my.cnf angepasst werden. Dieser kann entweder auskommentiert werden (jeder Rechner kann mit Angabe von User und Passwort auf die DB verbinden) oder explizit die IP des SmartHomeNG Servers gesetzt werden. Mehrere IPs sind nicht möglich. Soll daher auch vom Datenbank-Server zugegriffen werden (bspw. für ein dort installiertes PhpMyAdmin) hilft nur auskommentieren und das setzen entsprechender Firewall Regeln.


...
[mysqld]
...
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address           = 127.0.0.1 (auskommentiert)
#oder alternativ
bind-address            = «IP des SmartHomeNG Servers»
...

Nach dem Speichern muss der Dienst mit sudo service mysql restart neu gestartet werden.

Vorbereitung des SmartHomeNG Servers für die Nutzung via Database Plugin:

Detaillierte Informationen siehe https://github.com/smarthomeNG/plugins/tree/master/database

Nach erfolgter Installation der Datenbank, muss auf dem SmartHomeNG Server das entsprechende Paket für Python3 installiert werden:


sudo pip3 install --upgrade pymysql

Achtung: Das sehr ähnlich klingende pymsql3 sollte nicht mehr verwendet werden (würde theoretisch mit dem Plugin aber auch funktionieren).

Das Database Plugin wird nun wie folgt in der plugin.yaml eingerichtet:

database:
    plugin_name: database
    driver: pymysql
    connect:
      - 'host:«ip des mariadb/mysql servers»'
      - 'user:smarthome'
      - 'passwd:«passwort des users smarthome»'
      - 'db:smarthome_db'

In den jeweiligen Items muss dann ein database@mysqldb: init erfolgen (oder das alte sqlite: init ersetzen).

Datenkonvertierung von SQLite

Das Datenbank Plugin nutzt intern ein anderes Format als die alte smarthome.db Datenbank. Wenn die Daten weiterhin genutzt werden sollen (historische Daten), dann müssen sie konvertiert werden ins neue Format.

Dazu muß auf der Shell ins SmartHomeNG Basisverzeichnis gewechselt und dann ein Konvertierungsscript aufgerufen werden:


cd /usr/local/smarthome
python3 plugins/database/>convert ./var/db/smarthome.db ... . # gibt es leider noch nicht ;)

todo: Skript schreiben für die Migration

Abschluß

Nachdem die Änderungen an den Items durchgeführt sind und die Konvertierung erfolgt ist, muß SmartHomeNG neu gestartet werden.


0 Kommentare

Schreibe einen Kommentar

Avatar-Platzhalter

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert