web-dev-qa-db-fra.com

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

Je me suis 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, c’est-à-dire environ 10 heures. En fait, j'essaie de lire des mots distincts d'un corpus. Une fois la lecture terminée, une erreur de temporisation s'est produite.

J'ai vérifié les délais d'expiration par défaut de 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 changer le délai d'attente par défaut?

44
Animesh Pandey

Faire:

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

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

  • connect_timeout : Nombre de secondes pendant lesquelles le serveur mysqld attend un paquet de connexion avant de répondre avec 'Bad handshake'
  • interactive_timeout Nombre de secondes pendant lesquelles le serveur attend une activité sur une connexion interactive avant de la fermer
  • wait_timeout Nombre de secondes pendant lesquelles le serveur attend l'activité d'une connexion avant de la fermer

BTW: 28800 secondes correspondent à 8 heures. Par conséquent, pour une durée d'exécution de 10 heures, ces valeurs doivent être réellement plus élevées.

51
Ivelin

Vous changez la valeur par défaut dans le fichier de configuration MySQL (option section connect_timeout in 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;
48
Devart

Je sais que c’est une vieille question mais, pour mémoire, ceci peut également être fait en transmettant les options de connexion appropriées en tant qu’arguments à l’appel _mysql.connect. 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 (Host, passwd, etc.). Ils améliorent la lisibilité de votre code.

Pour plus de détails sur les différents arguments que vous pouvez passer à _mysql.connect, consultez Documentation de l'API MySQLdb

8
nsane

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

Vérifier la valeur actuelle 

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

Puis réglez-le en fonction de vos besoins.

SET SESSION MAX_EXECUTION_TIME=2000;
SET GLOBAL MAX_EXECUTION_TIME=2000;
0
xs2rashid