Hi fastix®,
vielen Dank für Deine Tipps und Hilfen!
DBD::mysqlPP scheint DBI nicht mitzuteilen, wenn die Verbindung zum MySQL Server abgebaut wurde - das ist ein Problem, denn selbst DBD::mysqlPP erkennt nicht die Verbindungstrennung. Zuletzt (nach unendlichen Versuchen die Fehler irgendwie abzufangen - so gegen 23 Uhr...) sah meine mysql_check-Funktion dann so aus:
<CUT>
sub mysql_check(){
my $mysql_check=0;
my @mysql_check_dummy=();
if(defined($mysql)){
print "defined\n";
if($mysql->can("prepare")){
print "can prepare\n";
if(defined($cmd=$mysql->prepare("SHOW TABLES")){
print "prepare\n";
if($cmd->execute()){
print "execute\n";
if(@mysql_check_dummy=$cmd->fetchrow_array()){
print "fetchrow\n";
$cmd->finish();
$mysql_check=1;
}
}
}
}
}
return $mysql_check;
}
</CUT>
Mit "print" habe ich mir ausgeben lassen, wo sich das Script gerade befindet - und nach "print "execute\n";" ist es dann passiert. Der Fehler findet innerhalb von DBD::mysqlPP statt: Der Treiber sendet Daten an den Server ohne die Verbindung zu prüfen. Beim Versuch Daten von der nicht existierenden Verbindung zu lesen knallt's dann - ein Problem, dass ich nicht beheben kann, weil ich mysqlPP nicht ändern darf. Naja...
Also ich hab's jetzt so gelöst, dass halt jedes mal vor "sleep" die MySQL-Verbindung getrennt und nach "AUFWACHEN:" wieder aufgebaut wird. Das funktioniert, solange die Verbindung nicht irgendwo unkontrolliert unterbrochen wird - dann habe ich natürlich wieder das selbe Problem. Ich hoffe mal, dass es relativ selten vorkommen wird, dass die Verbindung einfach so weg ist...
Schade eigentlich, dass DBD::mysql auf System-C-Librarys zugreift, sonst würde ich den Treiber nehmen; Der funktioniert nämlich recht gut, scheint jedenfalls weniger Macken zu haben... Aber vielleicht schreibe ich bei Gelegenheit mal meinen eigenen Perl MySQL-Treiber DBD::mysqlPPreloaded ;o)
Ciao
nd