Gibt es eine Möglichkeit, ein Keepalive im Befehlszeilen-MySQL-Client unter Linux festzulegen?
Unser Netzwerk wurde kürzlich auf ein VLAN-Setup umgestellt, und unsere Systemabteilung hat keine Kontrolle mehr über die Firewall. Die Machthaber haben beschlossen, in ihrer Firewall eine Regel festzulegen, nach der alle Verbindungen nach 30 Minuten abgebrochen werden, wenn keine Daten durchgelassen wurden (etwas über das Verfolgen von Verbindungen und begrenzten Ressourcen). Ich habe keine Kontrolle darüber.
Als Serveradministrator und Programmierer besteht mein Problem darin, dass ich während der Programmierung keinen MySQL-Befehlszeilenclient im Hintergrund ausführen kann. Wenn ich keine Abfrage sende (oder auf andere Weise Daten sende), stellt der Client beim Versuch 35 Minuten später fest, dass keine Verbindung mehr besteht. Ich muss mich jedes Mal wieder verbinden.
In SSH kann ich ein Keepalive festlegen, damit die Verbindungen den ganzen Tag offen bleiben. Gibt es eine ähnliche konfigurierbare Option für den MySQL-Befehlszeilenclient? Ich habe Probleme, etwas zu finden, da "Mysql Keepalive" und ähnliche Suchvorgänge alle Rückgabeergebnisse für eine Backend-Verbindung innerhalb einer Programmiersprache liefern.
quelle
Der MySQL CLI-Client verwendet standardmäßig die automatische Verbindung, wenn während einer Sitzung eine Verbindung unterbrochen wird. Dokumentation: MySQL-Tipps und Steuern des automatischen Wiederverbindungsverhaltens .
Die wirkliche Lösung wäre, mit den Machthabern zu arbeiten und eine Lösung zu finden, die für Mitglieder des Entwicklungsteams funktioniert.
Das würde natürlich einige Zeit dauern, daher muss möglicherweise eine vorübergehende Lösung ausgearbeitet werden. Ich würde empfehlen, MySQLs auto-connect (
--skip-reconnect
) zu deaktivieren und ein einfaches Bash-Skript zu erstellen, um die Wiederverbindung zu handhaben. Keine gute Idee, könnte aber helfen.quelle
Sie können libkeepalive verwenden , um ein Programm vorab zu laden
libkeepalive.so
, dassocket()
Anrufe abfängt und automatischsetsockopt()
mit Ihren bevorzugten Keepalive-Einstellungen am Socket anruft, bevor Sie es zurückgeben.Dazu müssen Sie die Anwendung nicht neu kompilieren (in diesem Fall MySQL), sie ist vollständig transparent.
Siehe auch das TCP Keepalive HOWTO .
quelle