Как я могу изменить тайм-аут соединения MySQL по умолчанию при подключении через Python?

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

  •  07-03-2022
  •  | 
  •  

Вопрос

Я подключен к базе данных MySQL с помощью Python con = _mysql.connect('localhost', 'dell-pc', '', 'test')Программа, которую я написал, требует много времени в полном исполнении, то есть около 10 часов. На самом деле, я пытаюсь прочитать отчетливые слова из корпуса. После того, как прочтение было закончено, была ошибка тайм-аута.

Я проверил тайм-ауты 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    |
+----------------------------+----------+

Как я могу изменить тайм-аут по умолчанию?

Это было полезно?

Решение

Делать:

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

Значение параметра (взято из MySQL Workbench в навигаторе: экземпляр> Параметры> Вкладка «Сеть»> Раздел «Настройки тайм-аута»)

  • connect_timeout.: Количество секунд Server MySQLD ждет пакета подключения, прежде чем отвечать на «плохое рукопожатие»
  • Interactive_Timeout Количество секунд Сервер ждет активности в интерактивном соединении перед его закрытием
  • wait_timeout. Количество секунд Сервер ждет активности на соединении перед его закрытием

BTW: 28800 секунд - 8 часов, поэтому в течение 10 часов времени выполнения эти значения должны быть на самом деле выше.

Другие советы

Вы меняете значение по умолчанию в файле конфигурации MySQL (опция connect_timeout. в mysqld. раздел) -

[mysqld]
connect_timeout=100

Если этот файл недоступен для вас, то вы можете установить это значение с помощью этого оператора -

SET GLOBAL connect_timeout=100;

Я знаю, что это старый вопрос, но только для записи, это также может быть сделано, передавая соответствующие варианты подключения в качестве аргументов _mysql.connect вызов. Например,

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

Обратите внимание на использование параметров ключевых слов (хост, passwd и т. Д.). Они улучшают читаемость вашего кода.

Для деталей о различных аргументах, к которым вы можете передать _mysql.connect, видеть MySQLDB API Документация

Max_execution_time также является важным параметром для длительных запросов. Will Work для MySQL 5.7 или позже.

Проверьте текущее значение

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

Затем установите его в соответствии с вашими потребностями.

SET SESSION MAX_EXECUTION_TIME=2000;
SET GLOBAL MAX_EXECUTION_TIME=2000;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top