Home Assistant + MariaDB: Datenbank bereinigen mit recorder.purge

Home Assistant + MariaDB: Datenbank bereinigen mit recorder.purge

Wenn du Home Assistant nutzt, sammelt die Komponente recorder kontinuierlich Zustände, Ereignisse und History in einer Datenbank. Viele Nutzer wechseln von SQLite zu MariaDB/MySQL, um größere Datenmengen besser zu handhaben.

Mit der Zeit wächst die Datenbank stark an. Große DB-Dateien führen zu langsameren Backups, höherem Speicherbedarf und möglichen Leistungseinbußen. Daher ist es sinnvoll, die gespeicherten Daten regelmäßig zu bereinigen — also alte Daten zu löschen und nur neuere History zu behalten.

Die „einfache“ Lösung aus dem Community-Thread

Im Thread „Purge MariaDB database – recorder.purge simple enough?“ teilt ein Nutzer eine Automation, die automatisch die DB bereinigen soll, sobald sie eine bestimmte Größe erreicht:

alias: 'Purge MariaDB Database'
description: When it reaches 3GB, perform purge and keep last 7 days after purge.
trigger:
  - platform: numeric_state
    entity_id: sensor.homeassistant_mariadb_size
    above: '3000'
condition:
  - condition: time
    before: '06:00:00'
    after: '01:00:00'
action:
  - service: recorder.purge
    data:
      keep_days: 7
mode: single

Der Gedanke: Sobald die DB etwa 3 GB überschreitet, wird nachts automatisch alles gelöscht, was älter als 7 Tage ist. Später stellte der Nutzer jedoch fest, dass die Automation nie auslöste, weil die DB den Grenzwert nie erreicht hat. Deshalb wurde auf eine zeitgesteuerte Bereinigung umgestellt.

Probleme beim einfachen Ansatz

  • Triggern per DB-Größe funktioniert oft nur einmal. Danach bleibt die DB groß.
  • Bei MariaDB/MySQL verkleinert sich die Datei nach recorder.purge oft nicht automatisch, auch wenn alte Daten gelöscht werden.
  • Manchmal ist ein manuelles SQL-Optimieren oder Repacking notwendig.

Empfohlene Vorgehensweise

  1. Zeitbasierte Purge-Automation statt Trigger auf DB-Größe (z. B. täglich um 03:00 Uhr).
  2. Purge mit Repack, um Speicherplatz wirklich freizugeben.
  3. Nur relevante Domains/Entities aufzeichnen, um Datenmenge zu begrenzen.
  4. Monitoring der Datenbankgröße zur Kontrolle.
  5. Fallback: manuelles Aufräumen oder Neuaufbau bei Problemen.

Beispielkonfiguration

Recorder-Konfiguration (configuration.yaml):

recorder:
  db_url: mysql://user:pass@IP_oder_Hostname/homeassistant?charset=utf8mb4
  purge_keep_days: 14
  auto_purge: false
  include:
    domains:
      - sensor
      - switch
      - light
      - media_player
  exclude:
    domains:
      - automation
      - weather
      - sun

Automation für tägliche Bereinigung (automations.yaml):

alias: 'Daily purge Home Assistant DB'
trigger:
  - platform: time
    at: '03:00:00'
action:
  - service: recorder.purge
    data:
      keep_days: 14
      repack: true
mode: single

Fazit

Die Idee „purge when DB > X GB“ klingt attraktiv, ist aber unzuverlässig. Eine zeitbasierte Bereinigung mit recorder.purge + repack + Filterung ist die sichere Methode, um die DB-Größe überschaubar zu halten und die Performance von Home Assistant stabil zu halten.

Weitere Infos im Original-Thread: community.home-assistant.io