Como posso alterar o tempo limite padrão da conexão do mysql ao conectar-se através do Python?

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

  •  07-03-2022
  •  | 
  •  

Pergunta

Eu conectei a um banco de dados MySQL usando o Python con = _mysql.connect('localhost', 'dell-pc', '', 'test')O programa que escrevi leva muito tempo em toda a execução, ou seja, cerca de 10 horas. Na verdade, estou tentando ler palavras distintas de um corpus. Depois que a leitura foi concluída, havia um erro de tempo limite.

Eu verifiquei os tempos limite padrão mysql que foram:

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

Como posso alterar o tempo limite padrão?

Foi útil?

Solução

Fazer:

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

Significado do parâmetro (retirado do MySQL Workbench no Navegador: Instância> Arquivo de Opções> Tab "Networking"> Seção "Timeout Settings")

  • connect_timeout.: Número de segundos O servidor MySQLD espera por um pacote de conexão antes de responder com "Handshake"
  • interactive_timeout. Número de segundos que o servidor aguarda atividade em uma conexão interativa antes de fechá-lo
  • wait_timeout. Número de segundos que o servidor aguarda atividade em uma conexão antes de fechá-lo

BTW: 28800 segundos são 8 horas, portanto, para um tempo de execução de 10 horas, esses valores devem ser realmente mais altos.

Outras dicas

Você altera o valor padrão no arquivo de configuração do MySQL (opção connect_timeout. dentro mysqld. seção) -

[mysqld]
connect_timeout=100

Se este arquivo não estiver acessível para você, você poderá definir este valor usando esta declaração -

SET GLOBAL connect_timeout=100;

Eu sei que esta é uma pergunta antiga, mas apenas para o registro que isso também pode ser feito passando as opções de conexão apropriadas como argumentos para o _mysql.connect chamar. Por exemplo,

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

Observe o uso de parâmetros de palavra-chave (host, passwd, etc.). Eles melhoram a legibilidade do seu código.

Por detalhes sobre diferentes argumentos que você pode passar para _mysql.connect, Vejo MySQLDB API Documentation.

Max_execution_time também é um parâmetro importante para consultas de execução longa. O trabalho para o MySQL 5.7 ou posterior.

Verifique o valor atual

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

Em seguida, configure de acordo com suas necessidades.

SET SESSION MAX_EXECUTION_TIME=2000;
SET GLOBAL MAX_EXECUTION_TIME=2000;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top