Problem mit meiner Datenbank

Begonnen von maci, 23 Februar 2025, 19:16:55

Vorheriges Thema - Nächstes Thema

maci

Hallo!
Ich habe auf meinem Fhem Server eine MariaDB Datenbank.
Da ich nie Probleme hatte, habe ich nie nachgesehen, aber jetzt ist das Problem, dass mir der Speicherplatz am Server ausgeht.
Die Datenbank hat eine Größe von ca 9GB. Die Tabelle history beinhaltet über 34 Mio Datensätze.

Ich wollte nun direkt in der Datenbank, nachdem ich mich mit mysql -u ... eingeloggt habe, alte Datensätze löschen. Hätt mal begonnen mit dem Löschen der Datensätze zB vom August 2021. Doch kurze Zeit nachdem ich den Befehl abgesetzt habe, bekomme ich die Meldung: Lost connection to MySQL server during query.
Einen Dump der Datenbank macht er auch nicht mehr. Der letzte erfolgreiche war am 8. Jänner 2025.

Wer weiß einen Rat, wie ich die Anzahl der Datensätze reduzieren kann?
Fhem auf Dell Thinclient, Fhem auf Raspebrry Pi4,
UniPi Vers. 1.1 mit Raspberry Pi3, 1wire USB Adapter mit OWX
Netatmo Wetterstation + Regenmesser + Netatmo Thermostat
Homematic mit HMLan

DS_Starter

Das sich die Datenbank verabschiedet kann daran liegen dass zu wenig Plattenplatz für temporäre Daten zur Verfügung steht, welche sich aus dem Selektionszeitraum beim Löschen ergeben. Üblicherweise ist /tmp der relevante Ordner in dem Platz benötigt wird. (glaube ich).

Möglich ist auch ein zu kleiner Wert des Parameters max_allowed_packet (siehe https://matomo.org/faq/troubleshooting/faq_183/).

Wahrscheinlich musst du schrittweise vorangehen und zum Beispiel erstmal monatsweise löschen.
Dazu kannst du ein DbRep-Device mit Einschränken über die Zeit-Attribute nutzen.
Siehe dazu auch das Wiki.
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

maci

Ich vermute, dass der restl. Plattenplatz von 2,6 GB nicht mehr ausreicht um bei der 9GB grossen Tabelle viel zu machen.

Hätte versucht die Parameter in mariadb Datenbank in my.cnf zu setzen, aber das verweigert der Server.
Da kommt dann "unknown variable ..." in der error log und der Server startet nicht mehr.

evtl. hat es auch damit zu tun, weil bei meiner Datenbank 2 verschiedene Files als Einstellung dienen.
Da gibt es ein Verzeichnis /etc/mysql/conf.d/ und ein Verzeichnis /etc/mysql/mariadb.conf.d
In den Verzeichnissen gibt es dann mehrere Einstellungsdateien
In der conf.d sind dies mysql.cnf (die aber leer ist) und die mysqldump.cnf.
Im Verzeichnis mariadb.conf.d sind 4 Dateien 50-client.cnf, 50-mysql-clients.cnf, 50-mysql_safe.cnf und 50-server.cnf.
In letzterer habe ich auch versucht, das bringt evtl dass, dass ich die jede Abfrage sofort zu einen Abbruch führt.

Ich habe es derzeit mal in der my.cnf nach den Aufruf der beiden Verzeichnisse hinzugefügt.
Hier ändert das aber auch nichts am Verhalten.

Wenn ich im Netz suche, findet man sehr sehr viel, aber entweder ändert es nichts, oder der Server startet nicht mehr.

Derzeit ratlos. :'(

Fhem auf Dell Thinclient, Fhem auf Raspebrry Pi4,
UniPi Vers. 1.1 mit Raspberry Pi3, 1wire USB Adapter mit OWX
Netatmo Wetterstation + Regenmesser + Netatmo Thermostat
Homematic mit HMLan

DS_Starter

Um dir mehr Platz für temporäre Daten zu schaffen könntest du ein LW mounten und tmpdir der MySQL dorthin legen. Ist hier beschrieben: https://www.ibm.com/docs/en/strategicsm/10.1.3?topic=esads-assigning-directory-that-is-not-tmp-mysql-temporary-files
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

ch.eick

Moin zusammen,
ich würde mal einen externen Client zum Aufräumen verwenden, bzw damit eine Datensicherung zu machen.
Hierdurch wird der Backup nicht auch noch auf die volle Disk geschrieben.
Eventuell sollte man das auch in kleineren Stücken machen.
Das reine löschen von Datensätzen bringt jedoch nicht sofort mehr Plattenplatz, sondern erst nach einem reorg der Datenbank.
Die lost connection ist ein Timeout für die Rückmeldung. Also beim Löschen lieber kleinere Datenmengen selectieren.

VG   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

maci

Ich berichte was ich gemacht habe:
Bei den Wichtiges Logs die weiter zurück verfolge habe ich mir ein FileLog zusätzlich eingerichtet.
Jetzt nach etwa 2 Wochen habe ich, nach dem kein Versuch eines Fileexports funktioniert hat, die Tabelle history gelöscht und neu angelegt.
Dann habe ich mir von den FileLog Dateien die Werte geholt und ein csv Datei zum Import in die Datenbank gebastelt.
Diese dann Importiert. Nun läuft wieder alles.
Damit mir das aber nicht mehr passiert, möchte ich die DB Werte immer beobachten.
Daher lese ich mir mal alles was hier im Forum und im Wiki so steht.

Mein Ziel ist, dass in der Datenbank künftig die Werte nach 30 Tagen ausgedünnt werden. (zb. 1 Wert je Stunde)
Und Werte die älter 500 Tage sind (ca 1,5 Jahre), sollen gelöscht werden.

Oder wie macht ihr das?
Fhem auf Dell Thinclient, Fhem auf Raspebrry Pi4,
UniPi Vers. 1.1 mit Raspberry Pi3, 1wire USB Adapter mit OWX
Netatmo Wetterstation + Regenmesser + Netatmo Thermostat
Homematic mit HMLan

tobi01001

Zitat von: maci am 09 März 2025, 20:22:55Mein Ziel ist, dass in der Datenbank künftig die Werte nach 30 Tagen ausgedünnt werden. (zb. 1 Wert je Stunde)
Und Werte die älter 500 Tage sind (ca 1,5 Jahre), sollen gelöscht werden.

Oder wie macht ihr das?
In etwa genau so mit Hilfe von DbRep-Devices.

Erstmal versuchen zu verhindern, dass überhaupt zu viel in der Db landet. Die Leistungsfähigkeit des DB-Servers ist da zumindest bei mir umgekehrt proportional zum Aufwand den ich damit betreibe :-D

Mit
  • delSeqDoublets - lösche ich aufeinanderfolgende identische Einträge (mit unterschiedlichem Zeitstempel. kommt mit "event-on-change-reading" normal nicht vor, aber mit event-min-interval halt manchmal schon
  • reduceLog - reduziere ich auf stündliche Durchschnittswerte
  • delEntries - lösche ich alte Werte außerhalb der Aufbewahrungsfrist
Du kannst die verschiedene DbRep Devices für die unterschiedlichen Tasks anlegen. Ich lasse sie dann nachts sequentiell über "executeAfterProc" laufen.
Achte auf die richtigen Attribute und einstellungen. Gelöscht, ist gelöscht - außer du hast einen Dump oder deine csv noch zur Hand.

FHEM@UbuntuServer on Lenovo ThinkCentre M900 [i5-6500T / 8GB RAM] MySQL-DbLog, Grafana, FTUI3 / HmIP incl. CCU3 / LGESS / Wärempumpe über TA CMI und CANoE / Shellies u.v.m.