Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. Repariere SQL-Datenbank

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    677

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    18
    1
    5.7k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.5k

Repariere SQL-Datenbank

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
11 Beiträge 3 Kommentatoren 1.0k Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • sissiwupS Offline
    sissiwupS Offline
    sissiwup
    schrieb am zuletzt editiert von
    #1

    Hallo,

    um die SQL-Datenbank mal wieder auf einen konsistenten Stand zu bringen bin ich wie folgt vorgegangen:

    Erweitere die Datenbank:

    (PS: mit mysql iobroker -pPASSWORT -e "sql…" kann man SQL-Kommandos starten )

    Achtung: Ja nach DB-Größe laufen die Kommandos durchaus ein paar Minuten

    ALTER TABLE `datapoints` ADD `type0` BIGINT NOT NULL COMMENT 'Number' ;
    ALTER TABLE `datapoints` ADD `type1` BIGINT NOT NULL COMMENT 'String' ;
    ALTER TABLE `datapoints` ADD `type2` BIGINT NOT NULL COMMENT 'Bool' ;
    
    

    609_sql0.jpg

    Fülle die neuen Spalten. Wenn mehr als eine gefüllt ist, ist der Datenpunkt korrupt.

    UPDATE datapoints SET datapoints.type0 = (SELECT count(*) FROM ts_number WHERE id =  datapoints.id  group by id)
    UPDATE datapoints SET datapoints.type1 = (SELECT count(*) FROM ts_string WHERE id =  datapoints.id  group by id)
    UPDATE datapoints SET datapoints.type2 = (SELECT count(*) FROM ts_bool WHERE id =  datapoints.id  group by id)
    
    

    Jetzt suche alle, die nicht konsistent sind:

    SELECT * FROM datapoints WHERE (type = 0 and (type1>0 or type2>0)) or (type = 1 and (type0>0 or type2>0)) or (type = 2 and (type1>0 or type0>0))
    

    Das waren bei mir mal so schlappe 120 Datenpunkte (basierend auf den div. Fehlern im sql-Adapter).

    Jetzt muß man leider per Hand jeden durchgehen und den richtigen Typ setzen.

    Ein Anhaltspunkt ist meistens dafür wo die meisten Datenpunkte geschrieben wurden.

    type 0 = Number
    type 1 = String (Zeichenkette)
    type 2 = bool (Wahrheitswert)
    
    

    Leider bleiben jetzt noch die leeren Datenpunkte (also wo noch nie etwas geloggt wurde oder die zu alt sind und nicht mehr verwendet)

    SELECT * FROM `datapoints` where type0+type1+type2=0
    

    Auch hier muss man nach den obigen Muster vorgehen. Oder man löscht die Punkte (da hier in den letzten Jahren nichts passiert ist).

    (EXECUTE, PRESS und STATE sind meist bool)

    Wenn die typen alle stimmen, dann:

    DELETE FROM ts_number WHERE id not in (select id from datapoints where type=0)
    DELETE FROM ts_string WHERE id not in (select id from datapoints where type=1)
    DELETE FROM ts_bool WHERE id not in (select id from datapoints where type=2)
    
    

    Jetzt sollte

    SELECT * FROM datapoints WHERE (type = 0 and (type1>0 or type2>0)) or (type = 1 and (type0>0 or type2>0)) or (type = 2 and (type1>0 or type0>0))
    

    keine Zeilen mehr als Ergebnis liefern.

    Für mich habe ich

    mysql iobroker -pPASSWORT -e "UPDATE datapoints SET datapoints.type0 = (SELECT count(*) FROM ts_number WHERE id =  datapoints.id  group by id)"
    mysql iobroker -pPASSWORT -e "UPDATE datapoints SET datapoints.type1 = (SELECT count(*) FROM ts_string WHERE id =  datapoints.id  group by id)"
    mysql iobroker -pPASSWORT -e "UPDATE datapoints SET datapoints.type2 = (SELECT count(*) FROM ts_bool WHERE id =  datapoints.id  group by id)"
    
    

    in eine Batchdatei geschrieben und lasse das einmal Nachts ausführen, so habe ich immer eine aktuelle Statistik.

    MfG

    Sissi

    –-----------------------------------------

    1 CCU3 1 CCU2-Gateway 1 LanGateway 1 Pi-Gateway 1 I7 für ioBroker/MySQL


    1 Antwort Letzte Antwort
    0
    • apollon77A Offline
      apollon77A Offline
      apollon77
      schrieb am zuletzt editiert von
      #2

      Interessant ist ob es jetzt "sauber "bleibt. Das würde mich besonders interessieren

      Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

      • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
      • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
      1 Antwort Letzte Antwort
      0
      • sissiwupS Offline
        sissiwupS Offline
        sissiwup
        schrieb am zuletzt editiert von
        #3

        @apollon77:

        Interessant ist ob es jetzt "sauber "bleibt. Das würde mich besonders interessieren `

        Ich werte das jetzt automatisch einmal am Tag aus. Wir werden sehen …

        MfG

        Sissi

        –-----------------------------------------

        1 CCU3 1 CCU2-Gateway 1 LanGateway 1 Pi-Gateway 1 I7 für ioBroker/MySQL


        1 Antwort Letzte Antwort
        0
        • sissiwupS Offline
          sissiwupS Offline
          sissiwup
          schrieb am zuletzt editiert von
          #4

          Hallo,

          fast sauber, nur:

          id      name    type    type0   type1   type2   Zeit
          541     tankerkoenig.0.stations.cheapest.e5.short       1       36866   20      0       0000-00-00 00:00:00
          547     tankerkoenig.0.stations.cheapest.e10.short      1       36638   20      0       0000-00-00 00:00:00
          554     tankerkoenig.0.stations.cheapest.diesel.short   1       36736   20      0       0000-00-00 00:00:00
          557     tankerkoenig.0.stations.0.e10.short     1       26838   3       0       0000-00-00 00:00:00
          559     tankerkoenig.0.stations.0.e5.short      1       27166   3       0       0000-00-00 00:00:00
          568     tankerkoenig.0.stations.0.diesel.short  1       27041   3       0       0000-00-00 00:00:00
          598     tankerkoenig.0.stations.1.diesel.short  1       27719   3       0       0000-00-00 00:00:00
          608     tankerkoenig.0.stations.8.diesel.short  1       37852   19      0       0000-00-00 00:00:00
          613     tankerkoenig.0.stations.8.e5.short      1       37618   19      0       0000-00-00 00:00:00
          614     tankerkoenig.0.stations.5.e5.short      1       28453   7       0       0000-00-00 00:00:00
          617     tankerkoenig.0.stations.1.e5.short      1       27883   3       0       0000-00-00 00:00:00
          631     tankerkoenig.0.stations.2.e10.short     1       37516   20      0       0000-00-00 00:00:00
          632     tankerkoenig.0.stations.2.e5.short      1       37541   20      0       0000-00-00 00:00:00
          634     tankerkoenig.0.stations.8.e10.short     1       37476   19      0       0000-00-00 00:00:00
          644     tankerkoenig.0.stations.9.e5.short      1       25786   2       0       0000-00-00 00:00:00
          647     tankerkoenig.0.stations.9.diesel.short  1       25216   2       0       0000-00-00 00:00:00
          649     tankerkoenig.0.stations.9.e10.short     1       25292   2       0       0000-00-00 00:00:00
          673     tankerkoenig.0.stations.2.diesel.short  1       37535   19      0       0000-00-00 00:00:00
          683     tankerkoenig.0.stations.3.e10.short     1       28897   6       0       0000-00-00 00:00:00
          693     tankerkoenig.0.stations.3.diesel.short  1       29077   7       0       0000-00-00 00:00:00
          695     tankerkoenig.0.stations.4.e5.short      1       28897   7       0       0000-00-00 00:00:00
          699     tankerkoenig.0.stations.6.e10.short     1       27042   3       0       0000-00-00 00:00:00
          705     tankerkoenig.0.stations.6.e5.short      1       27402   4       0       0000-00-00 00:00:00
          711     tankerkoenig.0.stations.7.e5.short      1       28626   3       0       0000-00-00 00:00:00
          715     tankerkoenig.0.stations.7.e10.short     1       28297   3       0       0000-00-00 00:00:00
          719     tankerkoenig.0.stations.7.diesel.short  1       28402   3       0       0000-00-00 00:00:00
          730     tankerkoenig.0.stations.3.e5.short      1       29203   6       0       0000-00-00 00:00:00
          731     tankerkoenig.0.stations.5.e10.short     1       28338   7       0       0000-00-00 00:00:00
          738     tankerkoenig.0.stations.6.diesel.short  1       26843   4       0       0000-00-00 00:00:00
          744     tankerkoenig.0.stations.4.e10.short     1       28596   7       0       0000-00-00 00:00:00
          748     tankerkoenig.0.stations.4.diesel.short  1       28746   7       0       0000-00-00 00:00:00
          754     tankerkoenig.0.stations.5.diesel.short  1       28384   7       0       0000-00-00 00:00:00
          

          Warum da short von number auf string gewechselt ist?

          Im Datenpunkt steht allerdings auch Zeichenkette.

          Es sind keine "NULL" Werte mehr aufgetaucht. (Danke für den Schalter).

          MfG

          Sissi

          –-----------------------------------------

          1 CCU3 1 CCU2-Gateway 1 LanGateway 1 Pi-Gateway 1 I7 für ioBroker/MySQL


          1 Antwort Letzte Antwort
          0
          • apollon77A Offline
            apollon77A Offline
            apollon77
            schrieb am zuletzt editiert von
            #5

            Der Typ in der dB der gesetzt ist gewinnt an sich es sei denn ein „speichern als“ ist gesetzt. Wenn beiden nicht da ist dann wird der offizielle Typ des Objekts genommen. So sollte es sein.

            Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

            • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
            • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
            1 Antwort Letzte Antwort
            0
            • sissiwupS Offline
              sissiwupS Offline
              sissiwup
              schrieb am zuletzt editiert von
              #6

              @apollon77:

              Der Typ in der dB der gesetzt ist gewinnt an sich es sei denn ein „speichern als“ ist gesetzt. Wenn beiden nicht da ist dann wird der offizielle Typ des Objekts genommen. So sollte es sein. `

              Ja, das scheint auch so zu sein. Bis getern 18:45 hat er aber unter Number gespeichert. Und auch gelesen.

              Ab dann hat er sich für String entschieden. Was ja auch funktioniert. Mich hat es nur gewundert, das es nur für diese Wert so ist.

              MfG

              Sissi

              –-----------------------------------------

              1 CCU3 1 CCU2-Gateway 1 LanGateway 1 Pi-Gateway 1 I7 für ioBroker/MySQL


              1 Antwort Letzte Antwort
              0
              • lobomauL Offline
                lobomauL Offline
                lobomau
                schrieb am zuletzt editiert von
                #7

                Ich habe immer folgende Fehlermeldung. Jemand eine Idee wie ich das Objekt mit der id=593 finde? Vielleicht finde ich dann die Ursache?

                sql.0	2018-05-22 11:30:29.219	error	Cannot delete DELETE FROM `ioBroker`.undefined WHERE id=593 AND ts < 1495445400200;: Error: ER_NO_SUCH_TABLE: Table 'ioBroker.undefined' doesn't exist
                

                Host: NUC8i3 mit Proxmox:

                • ioBroker CT Debian 13, npm 10.9.4, nodejs 22.21.0
                • Slave: Pi4
                1 Antwort Letzte Antwort
                0
                • apollon77A Offline
                  apollon77A Offline
                  apollon77
                  schrieb am zuletzt editiert von
                  #8

                  Es gibt die Tabelle iobroker.datapoints (glaube ich mich zu entsinnen oder leicht anders) wo die ids zu Objekt-IDs zugeordnet sind. Da findest du die Info.

                  Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

                  • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
                  • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
                  1 Antwort Letzte Antwort
                  0
                  • lobomauL Offline
                    lobomauL Offline
                    lobomau
                    schrieb am zuletzt editiert von
                    #9

                    @apollon77:

                    Es gibt die Tabelle iobroker.datapoints (glaube ich mich zu entsinnen oder leicht anders) wo die ids zu Objekt-IDs zugeordnet sind. Da findest du die Info. `
                    Danke für den Tipp. Kannst du mir grob sagen wo ich suchen kann nach dieser Tabelle? In einem der Ordner unter /opt/iobroker/ oder unter Objekte?

                    Host: NUC8i3 mit Proxmox:

                    • ioBroker CT Debian 13, npm 10.9.4, nodejs 22.21.0
                    • Slave: Pi4
                    1 Antwort Letzte Antwort
                    0
                    • apollon77A Offline
                      apollon77A Offline
                      apollon77
                      schrieb am zuletzt editiert von
                      #10

                      In deiner sql-datenbank! Ist eine Datenbank tabelle

                      Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

                      • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
                      • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
                      1 Antwort Letzte Antwort
                      0
                      • lobomauL Offline
                        lobomauL Offline
                        lobomau
                        schrieb am zuletzt editiert von
                        #11

                        @apollon77:

                        In deiner sql-datenbank! Ist eine Datenbank tabelle `
                        Ja, gefunden. War tatsächlich datapoints.

                        Da ich mein Passwort nicht mehr wusste für die Datenbank, habe ich neues erstellen müssen. Nun kriege ich leider sql nicht mehr ans Laufen, vorher ging immer "sudo mysqladmin flush-hosts"… nun hat root kein Zugriff mehr 'Acces denied for user 'root'@'localhost' (using password : no).... morgen probiere ich weiter...

                        Host: NUC8i3 mit Proxmox:

                        • ioBroker CT Debian 13, npm 10.9.4, nodejs 22.21.0
                        • Slave: Pi4
                        1 Antwort Letzte Antwort
                        0

                        Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

                        Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

                        Mit deinem Input könnte dieser Beitrag noch besser werden 💗

                        Registrieren Anmelden
                        Antworten
                        • In einem neuen Thema antworten
                        Anmelden zum Antworten
                        • Älteste zuerst
                        • Neuste zuerst
                        • Meiste Stimmen


                        Support us

                        ioBroker
                        Community Adapters
                        Donate
                        FAQ Cloud / IOT
                        HowTo: Node.js-Update
                        HowTo: Backup/Restore
                        Downloads
                        BLOG

                        383

                        Online

                        32.7k

                        Benutzer

                        82.6k

                        Themen

                        1.3m

                        Beiträge
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                        ioBroker Community 2014-2025
                        logo
                        • Anmelden

                        • Du hast noch kein Konto? Registrieren

                        • Anmelden oder registrieren, um zu suchen
                        • Erster Beitrag
                          Letzter Beitrag
                        0
                        • Home
                        • Aktuell
                        • Tags
                        • Ungelesen 0
                        • Kategorien
                        • Unreplied
                        • Beliebt
                        • GitHub
                        • Docu
                        • Hilfe