Google Cloud sql: потеряно соединение с сервером MySQL при "чтении начального пакета связи"

Я установил проект django / django-wiki по умолчанию. Локальные тесты работают нормально. Подключение к облачному sql с локального сервера (с google.appengine.ext.django.backends.rdbms) не работает, я полагаю, из-за некоторых проблем с аутентификацией. Что еще более важно, я не могу подключиться с рабочего сервера.

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

У меня в app.yaml есть:

- name: MySQLdb
  version: "latest"

Моя DATABASE запись следующая:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'dbname',
        'USER': 'root',
        'PASSWORD': '',
        'HOST': '/cloudsql/appname:sqlinstance',
        'PORT': '',
    }
}

Кажется, он работает или, по крайней мере, не жалуется на отсутствующие пакеты или проблемы с импортом mysql. Моя проблема заключается в следующем (получена из производственных журналов, но также видна через выходные данные отладки django):

File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/MySQLdb-1.2.4b4/MySQLdb/connections.py", line 190, in __init__
    super(Connection, self).__init__(*args, **kwargs2)
OperationalError: (2013, "Lost connection to MySQL server at 'reading initial communication packet', system error: 38")

Что может быть причиной этого? Означает ли это, что была установлена ​​связь с чем-то, но ответа не было? В других сообщениях это, похоже, упоминается как проблема при подключении из внешнего источника, но это подключение из движка приложения AFAIK.


person jozxyqk    schedule 18.08.2014    source источник


Ответы (2)


Что ж, это было намного проще, чем ожидалось. Я предполагал, что облачный sql, созданный с моей учетной записью Google, по умолчанию просто предоставит доступ к моему приложению GAE. Это должно быть установлено явно из _1 _-> _ 2 _-> _ 3 _-> _ 4 _-> _ 5 _-> _ 6_. Или при создании экземпляра SQL откройте дополнительные параметры.

Я просто добавил имя своего приложения в поле, нажал «Сохранить», и все заработало.

person jozxyqk    schedule 19.08.2014
comment
Кто-нибудь знает, что это за место сейчас? Отсутствие авторизованных приложений App Engine в этом месте в Cloud SQL второго поколения. - person Praxiteles; 26.05.2016
comment
@Praxiteles по умолчанию разрешено. если вы посмотрите под контролем доступа, вы увидите, что все приложения в этом проекте авторизованы по умолчанию. Чтобы авторизовать приложения в других проектах, выполните следующие действия. однако я все еще получаю ошибку, о которой упоминал OP - person sqram; 09.11.2016
comment
Это сработало для меня. Я ошибочно предположил, что наличие 0.0.0.0/0 (оно использовалось только для тестирования и означает, что разрешен любой узел подключения, как указано в руководстве по GAE Django), указанный в авторизованных сетях, предоставит моему приложению разрешение, но, похоже, нет . - person Matthew R.; 20.12.2016
comment
@sqram Я все еще получаю ту же ошибку, несмотря на то, что всем приложениям разрешен доступ. Вы когда-нибудь находили решение? Однако я знаю, что прошло много времени. - person turtlefranklin; 23.01.2017
comment
@turtlefranklin я сделал. и я, к сожалению, не помню решение, но я помню, что это было что-то простое (я думаю, что это связано с форматированием / аргументами соединения). Подключитесь к irc freenode #appengine и попробуйте спросить там. это немного медленный канал, но здесь есть люди, которые являются экспертами. - person sqram; 24.01.2017
comment
Примечание. Мне нужно было добавить учетную запись службы к разрешениям, хотя база данных находилась в том же проекте, что и приложение appengine. После добавления разрешения моя проблема была решена. - person Sasha; 28.05.2018

согласно this, всякий раз, когда экземпляр умирает (по какой-либо причине), он перезапускается и, пока он перезапускается, он просто выдает эту ошибку, пока не будет готов к приему запросов.

Лучше всего попробовать реализовать экспоненциальный откат. Как часто это происходит? Каждый раз или только время от времени?

person Patrice    schedule 18.08.2014
comment
Насколько я могу судить, это происходит каждый раз. Мне удалось подключиться с помощью google.appengine.ext.django.backends.rdbms для выполнения начального manage.py syncdb, но не из производственной среды. Мне было интересно, есть ли какая-то авторизация, которую я должен установить со стороны облачного sql. - person jozxyqk; 19.08.2014