Ich haben einen PHP-Cronjob, der unter Anderem mehrere große und kleine Tabellen kopiert, um diese anschließend weiter zu verarbeiten.
Dieser Job läuft bisher seit Jahren in ohne Probleme, soll aber nun auf einen anderen Server umziehen.
Es handelt sich um einen Neu installierten Ubuntu-Server (16.04) mit PHP 7.0.22 und MySQL 5.7.19, welche über Google Cloud eingerichtet wurde.
Die Tabellen werden mit dem Befehl "INSERT INTO ... SELECT" kopiert.
Die Abfragen dauern je ca. 1000 - 1200 Sekunden. Dies sehe ich in der Processlist. Der INSERT ist auch erfolgreich. Abschließend steht die Verbindung noch für 300 Sekunden als "Sleep" in der Processlist und wird dann (vermutlich wegen des korrekt gesetzten Timeouts) beendet. Die Zeit zählt weiter, beginnt nicht bei 0.
Normal bekomme ich dann nach Abschluss der MySQL-Abfrage sofort die entsprechende Ausgabe in PHP mit der Angabe, wie lange die Abfrage gedauert hat. Gemessen wird mithilfe der time()-Funktion in PHP.
Bei einigen größeren Tabellen scheint PHP aber nicht zu bemerken, dass die Abfrage abgeschlossen wurde und bringt entsprechend kein Ausgabe. Diese kommt erst nach 7278 bzw. 7001 Sekunden mit folgenden Fehlermeldungen:
Code: Select all
Kopiere Tabelle xyz...
PHP Warning: mysqli::query(): MySQL server has gone away in /pfad/zum/script.php on line 63
Warning: mysqli::query(): MySQL server has gone away in /pfad/zum/script.php on line 63
PHP Warning: mysqli::query(): Error reading result set's header in /pfad/zum/script.php on line 63
Warning: mysqli::query(): Error reading result set's header in /pfad/zum/script.php on line 63
Fertig! (7278 Sekunden)
Die Konfigurationen sind identisch. Ich habe schon die my.cnf (mysqld.conf) sowie die php.ini vom lokalen System kopiert, allerdings auch ohne irgendeine Änderung zu bemerken.
Ich hab schon die Option "max_allowed_packet" auf 256M erhöht (Einstellung bisheriger Server), ohne dass es funktioniert hat. Auch eine exorbitante Erhöhung auf 50G (Server hat 100G RAM), brachte keine Besserung.
Außerdem hab ich die Option "sql-mode" auf '' gesetzt.
Für weitere Ideen und Vorschläge wäre ich sehr dankbar.