2015-06-08 2 views
0

Я переношу устаревший db в кучу моделей, которые я запускаю локально. Я подключился к устаревшему db и запустил проверку, чтобы воссоздать модели. Теперь я пишу функции для сопряжения многочисленных полей с их эквивалентами в новых моделях. Я использую shell_plus и первую минуту или около запросов идут большим, но мои связи сохранить синхронизацию из со следующим:Таймаут Django (плюс) для удаленного подключения к базе данных

RemoteArticle.objects.using("remote_mysql").all()  
django.db.utils.OperationalError: (2013, 'Lost connection to MySQL server during query') 

Есть ли команда, которую я могу запустить либо а) повторно к db перед запуском запроса (так что мне не нужно повторно открывать shell_plus) или идеально b) сделать так, чтобы все мои запросы автоматически пересоединялись каждый раз, когда я их запускаю?

Я видел проблемы с таймаутом на других платформах, но я не был уверен, что Django имеет встроенный способ обработки таких вещей.

Спасибо!

ответ

1

Документы page in the MySQL. Так как вы, очевидно, пытается перенести большую базу данных, эта часть может обратиться к вам:

Иногда «во время запроса» формы происходит, когда миллионы строк являются рассылается как часть одного или нескольких запросов. Если вы знаете, что это происходит, попробуйте увеличить значение net_read_timeout со своего значения по умолчанию от 30 секунд до 60 секунд или дольше, достаточного для передачи данных .

Таймаут имеет смысл, потому что all() просто один запрос для получения всех строк. Таким образом, повторное подключение перед каждым запросом не является решением. Если изменение net_read_timeout не является вариантом, вы можете подумать о подкачке.

+0

Подтверждено: проблема заключалась в том, что мои запросы были просто слишком большими или требовали слишком много данных, а соединение MySQL время от времени зависало. Этот сервер не обращен к клиентскому интерфейсу, поэтому я смог увеличить время ожидания без проблем. –

0

Я считаю, что Lost connection to MySQL server during query происходит потому, что вы исчерпываете ресурс MySQL как тайм-аут, сеанс и память.

Если проблема связана с таймаутом, попробуйте увеличить таймаут --net_read_timeout=100. На сервере БД.

Смежные вопросы