Comment puis-je modifier le délai d'expiration de la connexion MySQL par défaut lors de la connexion via Python?

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

  •  07-03-2022
  •  | 
  •  

Question

J'ai connecté à une base de données MySQL à l'aide de Python con = _mysql.connect('localhost', 'dell-pc', '', 'test')Le programme que j'ai écrit prend beaucoup de temps en pleine exécution, soit environ 10 heures. En fait, j'essaie de lire des mots distincts d'un corpus. Une fois la lecture terminée, il y avait une erreur de délai d'attente.

J'ai vérifié les délais d'attente par défaut MySQL qui étaient:

+----------------------------+----------+
| 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    |
+----------------------------+----------+

Comment puis-je modifier le délai d'attente par défaut?

Était-ce utile?

La solution

Fais:

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

Paramètre Signification (extrait de MySQL Workbench dans Navigator: Instance> Fichier Options> Onglet "Réseau"> Section "Paramètres du délai d'attente")

  • Connect_timeout: Nombre de secondes, le serveur MySQLD attend un paquet de connexion avant de répondre avec "mauvaise poignée de main"
  • Interactive_timeout Nombre de secondes Le serveur attend l'activité sur une connexion interactive avant de la clôturer
  • wait_timeout Nombre de secondes Le serveur attend l'activité sur une connexion avant de la clôturer

BTW: 28800 secondes sont de 8 heures, donc pendant une période d'exécution de 10 heures, ces valeurs doivent être réellement plus élevées.

Autres conseils

Vous modifiez la valeur par défaut dans le fichier de configuration MySQL (option Connect_timeout dans mysqld section) -

[mysqld]
connect_timeout=100

Si ce fichier n'est pas accessible pour vous, vous pouvez définir cette valeur à l'aide de cette instruction -

SET GLOBAL connect_timeout=100;

Je sais que c'est une ancienne question mais juste pour le dossier, cela peut également être fait en passant des options de connexion appropriées comme arguments à la _mysql.connect appel. Par exemple,

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

Notez l'utilisation de paramètres de mots clés (hôte, passwd, etc.). Ils améliorent la lisibilité de votre code.

Pour les détails sur différents arguments que vous pouvez passer à _mysql.connect, voir Documentation API MySQLDB

Max_execution_time est également un paramètre important pour les requêtes de longue durée. Travailler pour MySQL 5.7 ou version ultérieure.

Vérifiez la valeur actuelle

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

Puis définissez-le en fonction de vos besoins.

SET SESSION MAX_EXECUTION_TIME=2000;
SET GLOBAL MAX_EXECUTION_TIME=2000;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top