Wie kann ich das standardmäßige MySQL-Verbindungszeitlimit ändern, wenn ich eine Verbindung über Python herstelle?

StackOverflow https://stackoverflow.com/questions/14726789

  •  07-03-2022
  •  | 
  •  

Frage

Ich habe über Python eine Verbindung zu einer MySQL-Datenbank hergestellt con = _mysql.connect('localhost', 'dell-pc', '', 'test')Das Programm, das ich geschrieben habe, benötigt in seiner vollständigen Ausführung viel Zeit, d. h.etwa 10 Stunden.Eigentlich versuche ich, verschiedene Wörter aus einem Korpus zu lesen.Nach Abschluss des Lesevorgangs trat ein Timeout-Fehler auf.

Ich habe die MySQL-Standardzeitüberschreitungen überprüft:

+----------------------------+----------+
| Variable_name              | Value    |
+----------------------------+----------+
| connect_timeout            | 10       |
| delayed_insert_timeout     | 300      |
| innodb_lock_wait_timeout   | 50       |
| innodb_rollback_on_timeout | OFF      |
| interactive_timeout        | 28800    |
| lock_wait_timeout          | 31536000 |
| net_read_timeout           | 30       |
| net_write_timeout          | 60       |
| slave_net_timeout          | 3600     |
| wait_timeout               | 28800    |
+----------------------------+----------+

Wie kann ich das Standard-Timeout ändern?

War es hilfreich?

Lösung

Tun:

con.query('SET GLOBAL connect_timeout=28800')
con.query('SET GLOBAL interactive_timeout=28800')
con.query('SET GLOBAL wait_timeout=28800')

Parameterbedeutung (aus MySQL Workbench im Navigator übernommen:Instanz > Optionsdatei > Registerkarte „Netzwerk“ > Abschnitt „Timeout-Einstellungen“)

  • Verbindungs ​​Timeout:Anzahl der Sekunden, die der MySQL-Server auf ein Verbindungspaket wartet, bevor er mit „Bad Handshake“ antwortet.
  • interaktive_timeout Anzahl der Sekunden, die der Server auf Aktivität bei einer interaktiven Verbindung wartet, bevor er diese schließt
  • wait_timeout Anzahl der Sekunden, die der Server auf Aktivität auf einer Verbindung wartet, bevor er diese schließt

Übrigens:28800 Sekunden sind 8 Stunden, daher sollten diese Werte bei einer Ausführungszeit von 10 Stunden tatsächlich höher sein.

Andere Tipps

Sie ändern den Standardwert in der MySQL-Konfigurationsdatei (Option Verbindungs ​​Timeout In mysqld Abschnitt) -

[mysqld]
connect_timeout=100

Wenn diese Datei für Sie nicht zugänglich ist, können Sie diesen Wert mit dieser Anweisung festlegen:

SET GLOBAL connect_timeout=100;

Ich weiß, dass dies eine alte Frage ist, aber nur für den Datensatz kann dies auch erfolgen, indem sie entsprechende Anschlussmöglichkeiten als Argumente an die _mysql.connect Anruf. Zum Beispiel,

con = _mysql.connect(host='localhost', user='dell-pc', passwd='', db='test',
          connect_timeout=1000)

Beachten Sie die Verwendung von Keyword-Parametern (Host, Passwd usw.). Sie verbessern die Lesbarkeit Ihres Codes.

Zum Detail über verschiedene Argumente, an die Sie passieren können _mysql.connect, sehen Mysqldb-API-Dokumentation.

MAX_EXECECUTT_TIME ist auch ein wichtiger Parameter für langlaufende Abfragen. Wird für MySQL 5.7 oder höher funktioniert.

Überprüfen Sie den aktuellen Wert

SELECT @@GLOBAL.MAX_EXECUTION_TIME, @@SESSION.MAX_EXECUTION_TIME;

Setzen Sie es dann nach Ihren Bedürfnissen ein.

SET SESSION MAX_EXECUTION_TIME=2000;
SET GLOBAL MAX_EXECUTION_TIME=2000;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top