Потерянное соединение с сервером MySQL по адресу < имя сервера >: < порт > ', системная ошибка: 10053 Установленное соединение было прервано

Вот одна часть моего кода на Python для вставки данных, полученных из Sharepoint, в базу данных MySQL, она выполняется каждые 10 минут.

cnx = mysql.connector.connect(user='user', password='pwd', host='CP-MSQL03',port='3306',database='datacenter')
cnx.autocommit=True
MySQL_cursor = cnx.cursor()


r = requests.get(url, headers=headers, params=params)
delete_data = []
for item in r.json()['d']['results']:
    id = item['Id']
    lot_No = item['LOT_No']
    start = datetime.strptime(item['START'], '%Y-%m-%dT%H:%M:%SZ')
    lbs = item['LBS']
    line_NAV = item['Line_No']['NAV_x0020_HS_x0020_LINE']
    rpo_No = item['RPO_No']['RPO_No']
    item_NO = item['RPO_No']['Item_No']
    mrt_No = item['RPO_No']['MRT_No']
    SQL_Insert = (
            "INSERT INTO datacenter.mrt_consumption_archive (Line_No, RPO_No, Item_No, MRT_No, LOT_No, Start_Time, LBS) "
            "VALUES('%s', '%s', '%s', '%s', '%s', '%s', %s);" % (
                line_NAV, rpo_No, item_NO, mrt_No, lot_No, start, lbs))
    MySQL_cursor.execute(SQL_Insert)
    delete_data.append(id)

И вот код ошибки, который я получил после успешного запуска в течение нескольких часов.

enter image description here

Мой вопрос: почему я получаю эту ошибку? Это проблема с брандмауэром? проблема установки тайм-аута? Как я могу устранить это? И почему я продолжаю получать одну и ту же ошибку при всех повторных попытках после первого сбоя?

1
задан Aaron_Geng 15 January 2019 в 19:29
поделиться

2 ответа

Если ваш скрипт успешно работал в течение нескольких часов, я думаю, что это может быть одним из параметров конфигурации вашей базы данных, просмотрите вашу конфигурацию с этим предложением,

SHOW GLOBAL VARIABLES where variable_name like'%time%';

Может быть, это много соединений или, может быть, тайм-аут сеанс, но я уверен, что это проблема вашего сервера MySQL

0
ответ дан Charly 15 January 2019 в 19:29
поделиться

Соединения разрываются, так бывает. Брандмауэр, маршрутизатор с поддержкой NAT и т. Д. Могут способствовать тому, чтобы это происходило чаще, чем следовало бы, но вы все равно не хотите, чтобы ваша программа вылетала.

Итак, в общем, прежде чем выполнить запрос, он должен выполнить проверку соединения и отловить все исключения соединения. когда пойман, перезагрузите соединение. К счастью, это знакомая концепция, называемая пулом, и она уже доступна через разъем.

Извлечено из https://dev.mysql.com/doc/connector-python/en/connector-python-connection-pooling.html :

Создать неявный пул соединений: откройте соединение и укажите один или несколько аргументов, связанных с пулом (pool_name, pool_size). Например:

dbconfig = {
  "database": "test",
  "user":     "joe"
}

cnx = mysql.connector.connect(pool_name = "mypool",
                              pool_size = 3,
                              **dbconfig)

Если вы просто хотите посмотреть на это с точки зрения сохранения открытых соединений по какой-то причине, вы также можете установить короткую продолжительность активности активности (которая может быть все Обходной путь вам нужен, если проблема в том, что ненадежное сетевое устройство очищает ваши соединения из таблиц в его памяти). Если вы можете решить проблему с сетью, это лучший путь, чем настройка параметров подключения.

0
ответ дан jejese 15 January 2019 в 19:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: