Zum Inhalt springen
Startseite » MariaDB

MariaDB

Home Assistant verwendet eine Datenbank, um Ereignisse und Parameter für den Verlauf und die Verfolgung der Entitäten zu speichern. Die bei einer Neuinstallation verwendete Standarddatenbank ist SQLite. Die Datenbank findest du im Konfigurationsverzeichnis (z. B. config/home-assistant_v2.db) deines Home Assistant Programms. Um die Standard-Datenbankbibliothek zu ändern, musst du die Recorder-Komponente in Home Assistant einstellen. In diesem Tutorial werde ich zeigen, wie du MariaDB als Haupt-SQL-Recorder-Datenbank  einrichtest. In diesem Tutorial werde ich zeigen, wie du MariaDB als Haupt-SQL-Recorder-Datenbank einrichtest. 

Sie sehen gerade einen Platzhalterinhalt von Youtube. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.

Mehr Informationen

Quelle: Wikipedia

Warum die Standarddatenbank ändern und optimieren?

Du fragst dich vielleicht, warum die Standarddatenbank geändert werden sollte? Warum bestimmte Entitäten in die Datenbank aufnehmen oder ausschließen, wenn ich sie alle erfassen kann? Die Antwort hängt von deiner Home Assistant-Installationsmethode, der Anzahl der Geräte, die du in HA integriert hast, und der Datenmenge ab, die du für einen bestimmten Zeitraum speichern möchten.

Obwohl die Standard-SQLite für den durchschnittlichen Benutzer in Ordnung ist und fein abgestimmt werden kann, um Entitäten für die Aufbewahrung von Aufzeichnungen einzuschließen oder auszuschließen, empfehle ich, zu einer besseren, optimierteren Datenbankbibliothek wie MariaDB zu wechseln. Sowohl SQLite als auch MariaDB sind beide relationale DBMS und dienen demselben Zweck, aber MariaDB ist besser in der Handhabung großer Datensätze , einfacherer Extraktion von Daten/Integrationen und schneller bei der Anzeige des Verlaufs.

Standardmäßig speichert Home Assistant Daten für etwa 10 Tage zur Verwendung in der Verlaufs- und Logbuch-Integration mit SQLite. Wenn du viele Geräte hast, die wiederum viele Entitäten erstellen, schreibt Home Assistant viele Ereignisse und Parameter in die .db-Datei. Dies belastet dein Speichermedium (insbesondere SD-Karten) sehr stark, da es viele E/A-Zyklen erzeugt. 

Wenn du beispielsweise dein Home Assistant auf einem Raspberry Pi mit einer SD-Karte ausführst, ist der Kartenausfall keine Frage von  WIRD ES  AUSFALLEN, sondern eine Frage von  WANN WIRD ES  AUSFALLEN? Der Recorder ist der Hauptschuldige für den Absturz einer Home Assistant-Instanz, die von einer SD-Karte ausgeführt wird. 

In erster Linie empfehle ich Home Assistant durch häufige Backups zu speichern.

Zweitens empfehle ich den Wechsel zu einem  SSD-Laufwerk  anstelle einer SD-Karte. Da der Raspberry Pi kein integriertes SSD-Dock im Inneren hat, musst du ihn extern mit einem USB-zu-SATA-Adapter installieren. Oder du verwendest, so wie ich, eine virtuelle Maschine, auf der du Home Assistant betreibst.

Rekorder vs. Historie vs. Logbuch

Bevor ich mit diesem Tutorial fortfahre, halte ich es für wichtig, den Unterschied zwischen der Recorder, der Historie und der Logbuch – Integration von Home Assistant zu verdeutlichen.

  • Die Recorder -Integration ist für das Speichern von Ereignissen, Zuständen und Daten in der Haupt-SQL-Datenbank verantwortlich.
  • Die Historie -Integration ist für die Anzeige von Daten aus dem Rekorder in der Benutzeroberfläche mithilfe von Google Graphs verantwortlich
  • Die Logbuch- Integration ist dafür zuständig, Änderungen und Ereignisse in einer rückwärts chronologisch sortierten Liste anzuzeigen 

Die wichtigsten Dinge, die du daraus mitnehmen kannst, sind:

  • Wenn der Rekorder für eine bestimmte Entität deaktiviert wird, sind der Verlauf und das Logbuch ebenfalls nicht verfügbar.
  • Wenn der Rekorder für eine bestimmte Entität aktiviert ist, kannst du den Verlauf oder das Logbuch selektiv aus der Anzeige von Daten in der Benutzeroberfläche deaktivieren.

Jede dieser Komponenten verwendet dieselbe Filterlogik, um Entitäten in die Integration selbst einzuschließen/auszuschließen. 

Installation und Einrichtung

MariaDB

Um MariaDB zu installieren, klickst du auf Einstellungen -> Add-ons -> Add-on Store -> MariaDB. Hier klickst du auf „Installieren“ und aktivierst die Schalter „Beim Booten starten“ und „ Watchdog “. 

Öffne die Registerkarte Konfiguration, um deinen Datenbanknamen und dein Passwort einzurichten. Danach startest du Home Assistant über die die Entwicklertools neu.

Terminal und SSH

Nun startest du das Add-on Terminal und SSH (Terminal und HACS). Im Terminal installierst du Python und SQLite to Mysql mit folgendem Code:

apk add python3
apk add py3-pip
pip3 install sqlite3-to-mysql

Anschließend wird die SQLite Datenbank mit folgendem Code in die MariaDB migriert:

sqlite3mysql \
--sqlite-file /config/home-assistant_v2.db \
--mysql-database homeassistant \
--mysql-host core-mariadb \
--mysql-user homeassistant \
--mysql-password '[Passwort deiner MariaDB]' \
--ignore-duplicate-keys

Das Passwort deiner MariaDB ist einzutragen.

Nachdem der Vorgang abgeschlossen ist, kopierst du den Recorder Code und fügst diesen in der Configuration.yaml bzw. Recorder.yaml Datei ein.

db_url: mysql://homeassistant:Passwort@core-mariadb/homeassistant?charset=utf8mb4

Das Passwort deiner MariaDB ist einzutragen.

Danach startest du Home Assistant neu.

Nun kannst du überprüfen, ob deine Migration deiner Daten erfolgreich war.

Wie hilfreich war dieser Beitrag?

Klicke auf die Sterne um zu bewerten!

Durchschnittliche Bewertung 4.9 / 5. Anzahl Bewertungen: 11

Bisher keine Bewertungen! Sei der Erste, der diesen Beitrag bewertet.

Es tut uns leid, dass der Beitrag für dich nicht hilfreich war!

Lasse uns diesen Beitrag verbessern!

Wie können wir diesen Beitrag verbessern?

27 Gedanken zu „MariaDB“

  1. Hallo,
    danke für Deine Mühen. Ich wollte gerade die Datenbank migrieren. Diese Fehlermeldung bekomme ich.

    2023-01-08 19:00:55 ERROR 1045 (28000): Access denied for user ‚homeassistant’@’172.30.33.1‘ (using password: YES)

    Kannst Du damit etwas anfangen? Ich habe es 3x probiert.
    Gruß und Danke
    Robert

  2. Guten Tag
    Erstklassige Anleitung, vielen Dank dafür erst einmal! Wenn das Backup gleich fertig ist werde ich nach dieser Anleitung arbeiten.
    Ich hätte allerdings noch ein paar Fragen…
    Wie viele Tage kann bzw. sollte man Maximal speichern?
    Ich hätte gerne die Daten des Stromverbrauches (Shelly3EM) ohne Speicherbegrenzung, damit ich in ein paar Jahren auch eine Statistik im Energy Tab anschauen kann.
    Kann man bestimmte Logs auch für lange Zeit behalten?
    Die Meisten Aufzeichnungen, wann und wie oft eine Lampe eingeschaltet wurde sind natürlich auf lange Zeit total unwichtig.

    Ich habe jetzt Parallel noch die InfluxDB installiert, diese Datenbank sollte ja für die Langzeit Speicherung zuständig sein. Ich vermute aber das der Energie Tab in HomeAssistant nicht auf die Datenbank zugreift und ich nur mit z.B. Grafana die Daten auswerten könnte, ist das so korrekt?

  3. Hallo,
    Ich habe nach dieser Anleitung den Umstieg der Datenbank geschafft, allerdings sieht der Verlauf von Entitäten sehr gewöhnungsbedürftig aus es sind nur noch senkrechte bzw. waagrechte Linien erkennbar früher hatten die eher eine Kurvenform. Oder muss ich jetzt noch influx und grafana nachinstallieren?

      1. Vielen Dank für die Beschreibung des Prozesses und das begleitende Video! Die Migration läuft ohne Fehler durch, allerdings endet es bei mir immer in einer seltsamen Darstellung der Daten, wie es oben ein anderer User schon beschrieben hat.
        Ich habe es nun schon fünfmal probiert, jedes Mal das MariaDB-Addon deinstalliert, nach jeder Aktion neugestartet und drauf geachtet, dass nach dem erstmaligen Start der neu installierten MariaDB bis zum Start des Migrationsskriptes nur wenige Sekunden vergehen, damit die Datenbank noch „frisch“ ist (weil das ja wohl ein Problem zu sein scheint). Hilft aber nichts.
        Gibt es noch eine bekannte Ursache, die dazu führt, dass die migrierten Daten sehr grob wirken, fast nur horizontale und vertikale Striche?
        Gruß, Jochen

  4. Hallo, bin auch grad dabei die Datenbank zu wechseln, Mariadb installiert, neu gestartet, dann python installiert und die sqlite3-to-mysql, allerdings beim kopieren der Daten sagt er mir „Error: Missing option ‚-f‘ / ‚–sqlite-file‘. Wenn ich die Argumente -f, -d, -h, -u, -p für file, database, host, user, passwort einfüge dann meckert er auch mit „Error: Got unexpected extra arguments (sqlit mysql mysql mysql mysql-password ignore-duplicate-keys)

    Weißt du woran es liegen könnte?

  5. Hallo,
    ich wollte die Daten nach MariaDB übernehmen und bekomme diese Fehlermeldung:
    Access denied for user ‚homeassistant’@’172.30.33.1‘ (using password: YES)
    Woher kommt die IP-Adresse? Kann es daran liegen?
    Ich benutze das SSH & WEB Terminal. Kann das die Ursache sein?

    Hast du einen Tipp für mich?
    Danke
    Michael

  6. Danke für die Anleitung. Hat alles funktioniert aber leider ist meine ganze History jetzt etwas merkwürdig.

    Sie sehen gerade einen Platzhalterinhalt von Standard. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.

    Mehr Informationen

    Habs erstmal wieder zurück auf die andere Datenbank gewechselt, da die Daten mir so nicht wirklich was bringen.

  7. Hallo und vielen Dank für den tollen Beitrag und das Tutorial-Video.

    Ich habe versucht, die Daten zu übertragen aber leider gehen auch bei mir immer die Daten kaputt.
    Ich habe folgendes gemacht:
    MariaDB installiert, Skript ausgeführt (>1Std), Recorder eingeschaltet, Restart HA –> Energie Daten waren kaputt und hatten komische Uhrzeiten
    sqltite Datenbank reduziert (weniger Daten aufgehoben)
    MariaDB deinstalliert, MariaDB installiert, db-File dupliziert (damit dort nicht rein geschrieben wird während dem lesen), Skript mit duplika ausgeführt (~30min), Recorder eingeschaltet, Restart HA –> Energie Daten waren kaputt und hatten komische Uhrzeiten

    Nun habe ich keine Idee mehr, was ich noch tun kann. Hast du noch eine Idee?

      1. Guten Abend 🙂

        Erst einmal herzlichen Dank für das Tutorial.

        Bei mir scheint es bisher (seit ca 3 Stunden) einwandfrei zu laufen.
        Wie schalte ich denn den Recorder ein? Was bedeutet „keine Daten in die Mariadb geschrieben“?

        Ist die db nicht dazu da, dass man Daten reinschreiben lässt?

        VG

  8. Hallo,
    mein HA läuft schon eine Weile. Gerne würde ich meine Energy History (Dashboard) beim Umzug auf MariaDB behalten wollen. Bei der Migration bleibt aber der Script bei „Transferring table states“ hängen. HA hängt sich vollständig auf und man kann nur noch per hartem reboot (Netzstecker ziehen) das HA wieder zum Leben bringen. Die SQLLite DB ist ca 900MB groß.

    Hat jemand einen Tipp, was hier schief läuft? Oder ist die DB einfach zu groß?

    Gruß,
    Dirk

  9. Hallo,
    Danke für deine tolle Anleitung. ich wollte heute meine DB migrieren scheitere aber leider schon bei der installation im terminal.
    ich bekomme die Meldung:

    Installing collected packages: unidecode, typing-extensions, tqdm, tabulate, simplejson, pytimeparse2, protobuf, packaging, click, mysql-connector-python, sqlite3-to-mysql
    Attempting uninstall: packaging
    Found existing installation: packaging 21.3
    ERROR: Cannot uninstall ‚packaging‘. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.

    hier noch alles was angezeigt wird:

    fetch https://dl-cdn.alpinelinux.org/alpine/v3.17/community/x86_64/APKINDEX.tar.gz
    (1/5) Installing libbz2 (1.0.8-r4)
    (2/5) Installing gdbm (1.23-r0)
    (3/5) Installing mpdecimal (2.5.1-r1)
    (4/5) Installing sqlite-libs (3.40.1-r0)
    (5/5) Installing python3 (3.10.12-r0)
    Executing busybox-1.35.0-r29.trigger
    OK: 147 MiB in 103 packages
    (1/7) Installing py3-six (1.16.0-r3)
    (2/7) Installing py3-retrying (1.3.3-r3)
    (3/7) Installing py3-parsing (3.0.9-r0)
    (4/7) Installing py3-packaging (21.3-r2)
    (5/7) Installing py3-setuptools (65.6.0-r0)
    (6/7) Installing py3-pip (22.3.1-r1)
    (7/7) Installing py3-pip-bash-completion (22.3.1-r1)
    Executing busybox-1.35.0-r29.trigger
    OK: 169 MiB in 110 packages
    Collecting sqlite3-to-mysql
    Downloading sqlite3_to_mysql-2.0.3-py3-none-any.whl (18 kB)
    Collecting typing-extensions
    Downloading typing_extensions-4.7.1-py3-none-any.whl (33 kB)
    Collecting pytimeparse2
    Downloading pytimeparse2-1.7.1-py3-none-any.whl (6.1 kB)
    Collecting packaging>=23.1
    Downloading packaging-23.1-py3-none-any.whl (48 kB)
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 48.9/48.9 kB 7.2 MB/s eta 0:00:00
    Collecting mysql-connector-python>=8.0.33
    Downloading mysql_connector_python-8.0.33-py2.py3-none-any.whl (390 kB)
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 390.1/390.1 kB 12.4 MB/s eta 0:00:00
    Collecting click>=8.1.3
    Downloading click-8.1.3-py3-none-any.whl (96 kB)
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 96.6/96.6 kB 13.2 MB/s eta 0:00:00
    Collecting tqdm>=4.65.0
    Downloading tqdm-4.65.0-py3-none-any.whl (77 kB)
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 77.1/77.1 kB 7.2 MB/s eta 0:00:00
    Collecting unidecode>=1.3.6
    Downloading Unidecode-1.3.6-py3-none-any.whl (235 kB)
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 235.9/235.9 kB 23.9 MB/s eta 0:00:00
    Collecting tabulate
    Downloading tabulate-0.9.0-py3-none-any.whl (35 kB)
    Collecting simplejson>=3.19.1
    Downloading simplejson-3.19.1-cp310-cp310-musllinux_1_1_x86_64.whl (142 kB)
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 143.0/143.0 kB 19.0 MB/s eta 0:00:00
    Collecting protobuf=3.11.0
    Downloading protobuf-3.20.3-py2.py3-none-any.whl (162 kB)
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 162.1/162.1 kB 20.8 MB/s eta 0:00:00
    Installing collected packages: unidecode, typing-extensions, tqdm, tabulate, simplejson, pytimeparse2, protobuf, packaging, click, mysql-connector-python, sqlite3-to-mysql
    Attempting uninstall: packaging
    Found existing installation: packaging 21.3
    ERROR: Cannot uninstall ‚packaging‘. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.

  10. Hallo, auch von mir danke für deine Anleitungen,
    wollte heute auf MariaDb umstellen, bekomme aber genau die gleiche Meldung wie mein Vorgänger Rudi:
    Installing collected packages: unidecode, typing-extensions, tqdm, tabulate, simplejson, pytimeparse2, protobuf, packaging, click, mysql-connector-python, sqlite3-to-mysql
    Attempting uninstall: packaging
    Found existing installation: packaging 21.3
    ERROR: Cannot uninstall ‚packaging‘. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.

  11. Hallo ihr lieben,
    Erst einmal ganz Großen Danke für deine tolle Anleitung.
    ich habe leider das selbe Problem wie Rudi und Christian P. bei der Installation findet er bereits installierte Packaging.
    Mein Homeassistant läuft in einer VM auf einem Qnap.

    Gruß
    Alex

  12. Hollo und erst einmal Vielen Dank für die Anleitung. Ich hatte die gleiche Fehlermeldung wie Rudi, Christian und Alex.
    Was bei mir geholfen hat:
    Die Pakete, wleche nciht installiert wurden manuell installieren. Bei mir z.B. mit ‚pip install mysql-connector-python‘ und ‚pip install click‘.
    Das Paket packaging-23.1 ist bei mir schon installiert (HAOS).
    Dann mit ‚pip install –no-deps sqlite3-to-mysql‘ das noch fehlende Paket installieren und den Check unterdrücken.
    Danach sollte sqlite3mysql installiert sein und laufen. Bei mir ging es jedenfalls.
    Viel Erfolg!
    Gruß
    Torsten

Schreibe einen Kommentar

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

The maximum upload file size: 5 MB. You can upload: image. Links to YouTube, Facebook, Twitter and other services inserted in the comment text will be automatically embedded. Drop file here