#mysql #mysql-python #mysql-connector
Вопрос:
Скрипт Python, работающий на Windows VPS (общий хостинг, удаленное подключение к MySQL, ограниченные ресурсы). Вставка текста в базу данных MySQL в Linux. Тип данных MySQL — «текст». Когда текст меньше 3000 символов, он работает нормально. Когда его количество превышает 3000 символов, время ожидания истекает. Вот код:
import mysql.connector
try:
mydb = mysql.connector.connect(host="", user="", password="", database="", connection_timeout=15)
mycursor = mydb.cursor()
except Exception as e:
print(e)
sql = "INSERT INTO tableName (experience) VALUES (%s)"
val = ('THREE THOUSAND CHARACTERS OF TEXT') # WORKS FINE
val = ('FOUR THOUSAND CHARACTERS OF TEXT') # TIMEOUT ERRORS
try:
mycursor.execute(sql, val)
mydb.commit()
print("record inserted")
except Exception as e:
print(e)
mycursor.close()
mydb.close()
Вот ошибки:
2055: Lost connection to MySQL server at system error: 10054 An existing connection was forcibly closed...
И когда я удаляю параметр тайм-аута из подключения:
2055: Lost connection to MySQL server at system error: 10060 A connection attempt failed because the connected...
Единственное решение, которое я могу придумать, — это каким-то образом буферизировать или загружать текст кусками, но я не думаю, что это можно сделать с помощью одной записи. Искренне признательна за помощь.
Комментарии:
1. опубликуйте таблицу создания и увеличьте время ожидания
2. Пожалуйста, объясните. Таблица уже существует. Увеличение connection_timeout не помогает. Что такое wait_timeout? Это настройка в MySQL? Спасибо.
Ответ №1:
Вы не прочитали комментарий полностью
тайм-аут подключения-это только время ожидания до установления соединения
wait_timeout-это время, в течение которого процесс ожидает завершения запроса.
Так что увеличьте wait_timeout
cursor.execute('SET GLOBAL wait_timeout=28800')
Комментарии:
1. Спасибо за ответ, но mycursor = mydb.cursor («УСТАНОВИТЬ ГЛОБАЛЬНЫЙ wait_timeout=30000»), похоже, не помогает. Все еще генерирует системную ошибку: 10060 Попытка подключения не удалась, поскольку подключенная сторона не ответила должным образом через некоторое время
2. это действительно медленное соединение, еще больше увеличьте оба параметра, время ожидания подключения, а также ожидание