Come posso modificare il timeout di connessione MySQL predefinito quando si collega attraverso Python?

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

  •  07-03-2022
  •  | 
  •  

Domanda

Ho collegato a un database MySQL usando Python con = _mysql.connect('localhost', 'dell-pc', '', 'test')Il programma che ho scritto richiede un sacco di tempo in pieno esecuzione cioè circa 10 ore. In realtà, sto cercando di leggere parole distinte da un corpus. Dopo aver letto è stato finito, c'era un errore di timeout.

Ho controllato i timeout predefiniti di MySQL:

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

Come posso modificare il timeout predefinito?

È stato utile?

Soluzione

Fare:

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

Significato dei parametri (presi da MySQL Workbench in Navigator: istanza> Opzioni File> Scheda "Networking"> Sezione "Impostazioni Timeout")

  • connect_timeout.: Numero di secondi Il server MySQLD attende un pacchetto Connect prima di rispondere con "Handshake Bad"
  • Interactive_timeout. Numero di secondi Il server attende l'attività su una connessione interattiva prima di chiudarlo
  • wait_timeout. Numero di secondi Il server attende l'attività su una connessione prima di chiudarlo

BTW: 28800 secondi sono 8 ore, quindi per un tempo di esecuzione di 10 ore questi valori devono essere in realtà più elevati.

Altri suggerimenti

Si modifica il valore predefinito nel file di configurazione MySQL (opzione connect_timeout. in mysqld. sezione) -

[mysqld]
connect_timeout=100

Se questo file non è accessibile per te, puoi impostare questo valore usando questa dichiarazione -

SET GLOBAL connect_timeout=100;

So che questa è una vecchia domanda ma solo per il record può anche essere fatto passando le opzioni di connessione appropriate come argomenti al _mysql.connect chiamata. Per esempio,

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

Si noti l'uso dei parametri delle parole chiave (host, passwd, ecc.). Migliorano la leggibilità del tuo codice.

Per dettagli su diversi argomenti che puoi passare a _mysql.connect, vedere Documentazione API MySQLDB.

Max_execution_time è anche un parametro importante per query a lungo funzionamento. Lavoro per MySQL 5.7 o successivo.

Controlla il valore corrente

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

Quindi impostalo in base alle tue esigenze.

SET SESSION MAX_EXECUTION_TIME=2000;
SET GLOBAL MAX_EXECUTION_TIME=2000;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top