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?
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")
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.
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;
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
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;