DbLog - FHEM stürzt ab bei "set ... count" wenn MySQL restartet wurde

Begonnen von DS_Starter, 10 April 2016, 21:33:03

Vorheriges Thema - Nächstes Thema

DS_Starter

Guten Abend,

ich habe DbLog mit einer remoten MySQL Datenbank auf Synology  eingesetzt.
Wird die Datenbank restartet (z.B. nach einem Backup der DB auf Synology) und dann der Befehl "set ... count" bzw. "set ... deleteOldDays" ausgeführt, stürzt FHEM ab.

Typische Meldung im Log ist : "DBD::mysql::db do failed: MySQL server has gone away ..."

Ich habe das Problem bei mir zunächst dadurch gelöst, dass ich in der sub DbLog_Set  die entsprechenden Kommandosektionen wie nachfolgend dargestellt um einen Verbindungscheck ergänzt habe ($dbh->ping).

...
    elsif ($a[1] eq 'count') {
        if ( not $dbh->ping ) {
            DbLog_Connect($hash)
        }
        else {
            Log3($name, 4, "DbLog $name: Records count requested.");
            my $c = $dbh->selectrow_array('SELECT count(*) FROM history');
            readingsSingleUpdate($hash, 'countHistory', $c ,1);
            $c = $dbh->selectrow_array('SELECT count(*) FROM current');
            readingsSingleUpdate($hash, 'countCurrent', $c ,1);
        }
    }
    elsif ($a[1] eq 'deleteOldDays') {
        Log3($name, 4, "DbLog $name: Deletion of old records requested.");
        my ($c, $cmd);
       
        if ( not $dbh->ping ) {
            DbLog_Connect($hash)
        }   
        else {
            $cmd = "delete from history where TIMESTAMP < ";
       
            if ($hash->{DBMODEL} eq 'SQLITE')        { $cmd .= "datetime('now', '-$a[2] days')"; }
               elsif ($hash->{DBMODEL} eq 'MYSQL')      { $cmd .= "DATE_SUB(CURDATE(),INTERVAL $a[2] DAY)"; }
               elsif ($hash->{DBMODEL} eq 'POSTGRESQL') { $cmd .= "NOW() - INTERVAL '$a[2]' DAY"; }
               else { $cmd = undef; $ret = 'Unknown database type. Maybe you can try userCommand anyway.'; }

               if(defined($cmd)) {
                   $c = $dbh->do($cmd);
                   readingsSingleUpdate($hash, 'lastRowsDeleted', $c ,1);
               }
        }
    }
.....


Das ist eine schnelle Problemlösung, es geht sicherlich noch besser. Aber dadurch stürzt FHEM nicht mehr ab.

@ Tobias, in der Maintainer.txt habe ich dich als Betreuer des Moduls gefunden. Kannst du dich der Sache mal bei Gelegenheit annehmen ?
Wäre super ...  :)

Schönen Abend !
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