DbRep - Import von 770MB csv (8.758.319 Datensätze) in mySQL, RasPi 3 stürzt ab.

Begonnen von Frank_Huber, 18 Januar 2019, 09:42:46

Vorheriges Thema - Nächstes Thema

DS_Starter

Die Crux dabei ist die Behandlung von Sonderzeichen bzw. der Umgang mit Zeichensätzen. °C ist ein typisches Beispiel dafür.
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

Frank_Huber

solange es sich einfach lösen lässt.... :-)

Im Idealfall müsste man wohl erst den Zichensatz der DB abfragen, dann entsprechend exportieren.
Problem kommt dann wohl beim Import, der müsste den Zeichensatz dann am File erkennen.
oder man bräuchte ne Steuerzeile am Anfang des csv.
Alles nicht so einfach und irgendwie auch unnötig wenns nur um die EInheit geht.

Frank_Huber

Zitat von: DS_Starter am 22 Januar 2019, 13:28:22

sqlCmd update history set TIMESTAMP=TIMESTAMP,UNIT='°C' WHERE UNIT='?C'

sollte es bringen.

Hallo Heiko,

Das hat leider nicht funktioniert.
Es lief eine Weile mit SqlResultRow_1   2249828   2019-01-22 14:52:23
sqlCmd   update history set TIMESTAMP=TIMESTAMP,UNIT='� C' WHERE UNIT='?C'   2019-01-22 14:52:23
sqlResultNumRows   2249828   2019-01-22 14:52:23
state   done   2019-01-22 14:52:23


Aber dannach immer noch:
MariaDB [fhem]> select * from history where reading = "temperature" and timestamp < "2016-11-17 00:00:00";
+---------------------+------------------+---------+----------------------+-------------+---------+------+
| TIMESTAMP           | DEVICE           | TYPE    | EVENT                | READING     | VALUE   | UNIT |
+---------------------+------------------+---------+----------------------+-------------+---------+------+
| 2016-11-16 13:14:39 | Flur_KG_Ost_Temp | OWTHERM | temperature: 10.4375 | temperature | 10.4375 | ? C  |
| 2016-11-16 14:04:39 | Flur_KG_Ost_Temp | OWTHERM | temperature: 10.5    | temperature | 10.5    | ? C  |
| 2016-11-16 15:04:39 | Flur_KG_Ost_Temp | OWTHERM | temperature: 10.6875 | temperature | 10.6875 | ? C  |
| 2016-11-16 16:04:39 | Flur_KG_Ost_Temp | OWTHERM | temperature: 10.6875 | temperature | 10.6875 | ? C  |
| 2016-11-16 17:04:39 | Flur_KG_Ost_Temp | OWTHERM | temperature: 10.75   | temperature | 10.75   | ? C  |
| 2016-11-16 18:04:39 | Flur_KG_Ost_Temp | OWTHERM | temperature: 10.6875 | temperature | 10.6875 | ? C  |
| 2016-11-16 19:04:39 | Flur_KG_Ost_Temp | OWTHERM | temperature: 10.75   | temperature | 10.75   | ? C  |
| 2016-11-16 20:04:39 | Flur_KG_Ost_Temp | OWTHERM | temperature: 10.875  | temperature | 10.875  | ? C  |
| 2016-11-16 21:04:41 | Flur_KG_Ost_Temp | OWTHERM | temperature: 10.75   | temperature | 10.75   | ? C  |
| 2016-11-16 22:04:41 | Flur_KG_Ost_Temp | OWTHERM | temperature: 10.8125 | temperature | 10.8125 | ? C  |
| 2016-11-16 23:04:41 | Flur_KG_Ost_Temp | OWTHERM | temperature: 10.8125 | temperature | 10.8125 | ? C  |
+---------------------+------------------+---------+----------------------+-------------+---------+------+


Mach Dir aber deswegen keinen Kopf. Die Einheit brauch ich nicht wirklich.
Neu geloggte Daten sind korrekt:
| 2019-01-22 14:57:30 | OWX_10_6D0CD6020800 | OWTHERM | state: T: 25.25 °C ↓    | data        | state: T: 25.25 °C ↓    | 25.25 °C ↓    |
| 2019-01-22 15:02:30 | OWX_10_6D0CD6020800 | OWTHERM | state: T: 25.38 °C ↓    | data        | state: T: 25.38 °C ↓    | 25.38 °C ↓    |
| 2019-01-22 14:02:19 | OWX_10_6D0CD6020800 | OWTHERM | state: defined          | state       | defined                 |               |
| 2019-01-22 14:02:29 | OWX_10_6D0CD6020800 | OWTHERM | state: initialized      | state       | initialized             |               |
| 2019-01-22 14:02:30 | OWX_10_6D0CD6020800 | OWTHERM | temperature: 24.6875    | temperature | 24.6875                 | °C            |
|

DS_Starter

Ganz am Anfang hattest du gepostet.


"2016-11-16 13:14:39","Flur_KG_Ost_Temp","OWTHERM","temperature: 10.4375","temperature","10.4375","�C"


Da steht nicht °C   ;)
Aber das Problem kenne ich schon vom Logging her. Kann man im DbLog mit dem charFilter Attribut für die zukünftigen Datensätze umgehen. Ist auch der einzige Fall der immer mal wieder aufpoppt.

Da ist ein Leerzeichen zwischen ? und C. Musst die where Bedingung anpassen und neu laufen lassen.

Oder so


sqlCmd update history set TIMESTAMP=TIMESTAMP,UNIT='°C' WHERE UNIT like '%C'
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

Frank_Huber

Zitat von: DS_Starter am 22 Januar 2019, 15:12:57
Da ist ein Leerzeichen zwischen ? und C. Musst die where Bedingung anpassen und neu laufen lassen.
genau das ist mir auch gerade beim vergleichen aufgefallen.
neuer Lauf läuft. :)

DS_Starter

Möglicherweise ist das aber nur ein Darstellungsproblem.

Mal mit fetchrows im DbRep anschauen wenn du fertig bist.
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

Frank_Huber

Zitat von: DS_Starter am 22 Januar 2019, 15:26:15
Möglicherweise ist das aber nur ein Darstellungsproblem.

Mal mit fetchrows im DbRep anschauen wenn du fertig bist.
Wenn alles korrekt läuft sollte ja jetzt nach dem Lauf alles in der DB korrekt sein.
Ich melde dann das Ergebnis.

Frank_Huber

fetchrows zeigt auch nur "C" an.
Ist mir aber jetzt egal. das passt so. :-)

weiter geht es mit dem testen:
- loggen anderer Instanzen in die mySQL
- einbinden ins Backup Script.
- Anpassen User Reading für DB Größe.

Frank_Huber

Zitat von: Frank_Huber am 22 Januar 2019, 16:09:29
fetchrows zeigt auch nur "C" an.
Ist mir aber jetzt egal. das passt so. :-)

weiter geht es mit dem testen:
- loggen anderer Instanzen in die mySQL
- einbinden ins Backup Script.
- Anpassen User Reading für DB Größe.
Das scheint alles problemlos zu funktionieren.
Nur das Backup ist bei MySQL doch um einiges größer als bei sqlite. Bei gleicher datenmenge.

Werd mal noch kucken wie sich remote Plots verhalten, denke aber dass auch das OK sein wird.

Der Umstellung der Produktivsysteme scheint nichts im Weg zu stehen.

Danke Heiko nochmal für deine allzeit kompetente Hilfe!

Gesendet von meinem Doogee S60 mit Tapatalk


Wernieman

- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Frank_Huber

Zitat von: Wernieman am 22 Januar 2019, 20:05:49
Wie sicherst Du denn?
Ich mach ein reopen 900 auf die DB, gefolgt von nem shell Script welches auf meinen fileserver sichert.
Hab ich vor langen von nem Blog gemopst.
Das script hat Initial nur /opt/fhem drin, das hab ich um den DB Ordner ergänzt.

Edit:
https://www.meintechblog.de/2015/05/fhem-howto-automatisches-backup-auf-externem-nas/

Zusätzlich gibt es wöchentlich einen Klon der SD Karte.
Da hast mir ja im anderen Thread zur Seite gestanden. [emoji6]



Gesendet von meinem Doogee S60 mit Tapatalk

DS_Starter

Hast du dir schon mal


set ... dumpMySQL serverSide  (oder clientSide)


für das Backup der MySQL-DB angeschaut ?
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

Frank_Huber

Zitat von: DS_Starter am 22 Januar 2019, 22:24:15
Hast du dir schon mal


set ... dumpMySQL serverSide  (oder clientSide)


für das Backup der MySQL-DB angeschaut ?
Nein, noch nicht.
Bei sqlite hat das mit der DB Datei immer gut funktioniert.
Hab so mehrfach eine aktive Instanz auf eine Test Instanz wiederhergestellt.

Restore Tests mit MySQL stehen noch aus. [emoji6]
Werd mit das mit dem dump mal reinziehen.

Gesendet von meinem Doogee S60 mit Tapatalk


DS_Starter

ZitatRestore Tests mit MySQL stehen noch aus.

Es gibt natürlich auch einen integrierten Restorebefehl mit einer Dropdown-Liste


set <DbRep> restoreMySQL <File>


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

Wernieman

Du könntest eine "richtige" DB sichern wie Du auch sql-light sicherst, nur wird dann ein restore nicht funktionieren. Eine DB cacht immr, bevor sie in die Datei schreibt, d.h. im laufenden Zustand sie die DB-Files mit großer Wahrscheinlichkeit inkonsistent.

Dafür gibt es eigene backup/restore-Befehle ....
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html