"Archivierung" von SQLite nach MySQL

Begonnen von MarcusR, 01 Juni 2017, 17:05:37

Vorheriges Thema - Nächstes Thema

MarcusR

Hi zusammen,

im Forum gab es ja schon einige Threads zum Thema Backup von DBLog und auch Umstieg von SQLite auf MySQL (oder zurück).
Was mich interessieren würde wäre folgendes:

Ich setze (bislang recht zufrieden) DBLog mit SQLite auf einem RPi ein. Um die Datenmenge zu begrenzen und Auswertungen zu beschleunigen würde ich gerne den Inhalt der DBLog in eine MySQL-Datenbank auf einem anderen Host (mit mehr Leistung) übernehmen.
Sinnvoll würde ich hier einen "schleppenden" Transfer halten, d.h. die jüngsten Daten werden periodisch in MySQL übernommen, die ältesten Daten aus der SQLite gelöscht.

Hat jemand so einen oder einen ähnlichen Anwendungsfall?  Fällt jemanden eine Best-Practice ein?

Die Lösungen, die ich bislang gefunden habe, zielen eigentlich immer auf ein spiegeln per dump+insert. Oder kosten halt gleich richtig Geld ;)

Viele Grüße
Marcus
FHEM auf RPi 2 im Schaltschrank mit Homematic, 1-Wire, S0, Hue, LivingColors, Robonect, WifiLight, Logitech Harmony Hub, Heizung, Webcams und andFHEM

DS_Starter

Hallo Marcus,

so etwas kannst du mit DbRep nach und nach, wenn gewünscht selektiv nach bestimmten Devices, erledigen.
Wie das geht, bzw. wie man das machen könnte habe ich im Wiki hier:

https://wiki.fhem.de/wiki/DbRep_-_Reporting_und_Management_von_DbLog-Datenbankinhalten#Datens.C3.A4tze_.28Devices.29_von_einer_Datenbank_in_eine_andere_umziehen_.28Export.2FImport.29

beschrieben.
Ich selbst betreibe MySQL remote und sehr zufriedenstellend auf einer Synology.

VG
Heiko
ESXi@NUC+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

MarcusR

Zitat von: DS_Starter am 01 Juni 2017, 23:14:23
so etwas kannst du mit DbRep nach und nach, wenn gewünscht selektiv nach bestimmten Devices, erledigen.
Wie das geht, bzw. wie man das machen könnte habe ich im Wiki hier:

https://wiki.fhem.de/wiki/DbRep_-_Reporting_und_Management_von_DbLog-Datenbankinhalten#Datens.C3.A4tze_.28Devices.29_von_einer_Datenbank_in_eine_andere_umziehen_.28Export.2FImport.29
beschrieben.
Ich selbst betreibe MySQL remote und sehr zufriedenstellend auf einer Synology.
Hi Heiko,

cool, Danke für den Hinweis, ich hatte mich zwar mal in DbRep eingelesen aber die Funktionen gar nicht mehr präsent :/
Etwas ähnliches habe ich mir schon mit einem SQL-Skript per SQLite-Client überlegt.
Wie kann ich aber beim Import per DbRep sicherstellen, dass ich auch alle Ereignisse habe und das auch nicht doppelt? Kann man den Import so konfigurieren, dass er Datensätze nicht doppelt hinzufügt (Indem er z.B. den Schlüssel vergleicht)? Dann könnte man mit einer Überlappung arbeiten, die in etwa der Laufzeit des Imports/Exports entspricht.

Sonst müsste man im Export-Job den Zeitraum dynamisch berechnen (z.B. Immer letze volle 10 Minuten: 11:48 => 11:30 bis 11:40) damit es weder Überschneidung noch Lücken gibt und die Export-Dateien zeitspezifisch benennen. So hätte man quasi eine Queue gebaut die das Zielsystem unabhängig importieren kann.

Oder hab ich nen Denkfehler?

Ciao,
        Marcus
FHEM auf RPi 2 im Schaltschrank mit Homematic, 1-Wire, S0, Hue, LivingColors, Robonect, WifiLight, Logitech Harmony Hub, Heizung, Webcams und andFHEM

DS_Starter

Hi Markus,

DbRep sichert den Import aller Datensätze über Transaktion ab. Das.h. es werden alle Sätze aus dem Exportfile importiert oder keiner. Wenn in dem File ein Problem festgestellt wird, bricht DbRep ab und zeigt dir die Zeile an. Die musst du dann bereinigen und das Ganze wiederholen.

Die Frage der doppelten Datensätze würde ich der DB überlassen.
Lege dir einen Primary Key an der das abdeckt. Du kannst den später löschen, ändern, was du willst. Wenn du dazu Fragen hast wird dir in dem DbLog Optimierung Forum auch hier in Automatisierung, sicherlich geholfen.

DbRep unterstützt inzwische Primary Key ( wenn ich alles richtig gemacht habe  ;) )

Auf jeden Fall würde ich den Prozess üben. Lege dir zwei MySql DBs an und teste mit der ersten. Wenn du mit dem Ergebnis zufrieden bist, kannst du das File in die Produktion importieren. Oder du exportiert die bereinigten Daten nochmal aus der Test DB und importiert dann in die Produktion.

Grüße
Heiko
ESXi@NUC+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