NEWS
Backitup: Restore einer SQL-Datenreihe
-
Hallo, ich hab zu meinem Problem nichts gefunden: Ich hab mir eine Datenreihe in meiner SQL-Datenbank gelöscht (mit einem javascript Script, das eigentlich nur fehlerhafte Daten löschen sollte). Jetzt würde ich die Datenreihe gerne wieder aus einem der Backups holen. Was für ein Format hat denn die .tar.gz Datei und wie kann man daraus einzelne Werte auslesen bzw. exportieren?
Ist insofern eigenartig, weil das file so aussieht:
tar tvf mysql_2019_11_02-03_10_08_backupiobroker.tar
-rw-r--r-- 1010/1017 4430254493 2019-11-02 03:16 .
D.h. kein Dateiname? -
Ok ich hab die Lösung selbst gefunden. Das ".tar"-file ist kein tar file, sondern einfach ein mit sqldump erzeugtes text-file. Die fehlende Datenreihe habe ich mir dann raus-editiert und per mysql wieder in die Datenbank geschrieben. Hat sich also erledigt.
Nur: das .tar ist echt verwirrend. Meine "echte" Linux-Zeit ist zwar schon 25 Jahre her, aber mit tar hat man zu meiner Zeit ganze Directories verpackt und nicht ein einzelnes Text-file damit bezeichnet. Hab ich da was verpasst? Warum heißt das backup nicht sowas wie backup.sql.gz? -
@joefarm sagte in Backitup: Restore einer SQL-Datenreihe:
Hallo, ich hab zu meinem Problem nichts gefunden: Ich hab mir eine Datenreihe in meiner SQL-Datenbank gelöscht (mit einem javascript Script, das eigentlich nur fehlerhafte Daten löschen sollte).
....Kannst du mir bitte verraten, um welches Skript es sich gehandelt hat? Kam das auch hier aus dem Forum?
Ich frage deshalb, weil ich auch mit einem Skript verwaiste Daten aus der SQL-Datenbank löschen wollte, mich aber bisher nicht traute. -
@Röstkartoffel said in Backitup: Restore einer SQL-Datenreihe:
@joefarm sagte in Backitup: Restore einer SQL-Datenreihe:
Hallo, ich hab zu meinem Problem nichts gefunden: Ich hab mir eine Datenreihe in meiner SQL-Datenbank gelöscht (mit einem javascript Script, das eigentlich nur fehlerhafte Daten löschen sollte).
....Kannst du mir bitte verraten, um welches Skript es sich gehandelt hat? Kam das auch hier aus dem Forum?
Ich frage deshalb, weil ich auch mit einem Skript verwaiste Daten aus der SQL-Datenbank löschen wollte, mich aber bisher nicht traute.Das ist sicher eine gute Idee, wenn man mit solchen Skripten vorsichtig ist Genau weil ich eben nicht vorsichtig war hatte ich mir eine Reihe gelöscht.
Und mein Skript enthält auch nichts, was erst mal einen Dry-run machen würde. Aber vom Grundprinzip sieht das so aus:
var sqlid = 0; var series = [ 'statistics.0.save.sumDelta.modbus.0.holdingRegisters.320_Totale_Erzeugung.month', 'statistics.0.save.sumDelta.modbus.0.holdingRegisters.118_Totalhomeconsumption.day', 'statistics.0.save.sumDelta.modbus.1.holdingRegisters.40107_M_Exported.day', 'statistics.0.save.sumDelta.modbus.0.holdingRegisters.320_Totale_Erzeugung.day', 'statistics.0.save.sumDelta.modbus.0.holdingRegisters.114_TotalhomeconsumptionPV.month', 'statistics.0.save.sumDelta.modbus.0.holdingRegisters.114_TotalhomeconsumptionPV.day', 'statistics.0.save.sumDelta.modbus.0.holdingRegisters.118_Totalhomeconsumption.month', 'statistics.0.save.sumDelta.modbus.0.holdingRegisters.112_TotalhomeconsumptionGrid.month', 'statistics.0.save.sumDelta.modbus.0.holdingRegisters.110_TotalhomeconsumptionBattery.month', 'statistics.0.save.sumDelta.modbus.1.holdingRegisters.40115_M_Imported.month', 'statistics.0.save.sumDelta.modbus.1.holdingRegisters.40107_M_Exported.month' ]; console.log(series.length); series.forEach(clean_series); function clean_series(item, index) { //first get the id sendTo('sql.0', 'query', "SELECT id FROM iobroker.datapoints t where t.name = '" + item + "'", function (result) { if (result.error) { console.error(result.error); } else { //console.log(JSON.stringify(result.result)); sqlid = result.result[0].id; console.log(item + ' ' + sqlid); var query = 'DELETE FROM iobroker.ts_number \ WHERE id = ' + sqlid + ' AND ts % 100000 != 99000'; //delete all entries with ts not ending in 99000 console.log (query); sendTo('sql.0', 'query', query, function (result) { //console.log(JSON.stringify(result.result)); }); }; }); };
Das Skript ist in meinem Fall dazu da, aus den Statistik-Werten (in meinem Fall die Tages-/usw.-Werte meiner PV-Anlage) alle Werte zu entfernen, die nicht um 23:59 Uhr erzeugt wurden. Meistens sind es einfach doppelte Werte, aber die sehen in den Graphiken nicht gut aus.
Also von der Idee her einfach, aber in der Umsetzung nicht ganz ungefährlich. -
@joefarm sagte in Backitup: Restore einer SQL-Datenreihe:
Ok ich hab die Lösung selbst gefunden. Das ".tar"-file ist kein tar file, sondern einfach ein mit sqldump erzeugtes text-file. Die fehlende Datenreihe habe ich mir dann raus-editiert und per mysql wieder in die Datenbank geschrieben. Hat sich also erledigt.
Nur: das .tar ist echt verwirrend. Meine "echte" Linux-Zeit ist zwar schon 25 Jahre her, aber mit tar hat man zu meiner Zeit ganze Directories verpackt und nicht ein einzelnes Text-file damit bezeichnet. Hab ich da was verpasst? Warum heißt das backup nicht sowas wie backup.sql.gz?Hi, wollte heute auch das Backup wieder einspielen, gibt es hier einen Königsweg die Daten wieder zu importieren? Ca. 670MB groß...