GAE Python — OperationalError: (2013, «Потеряно соединение с сервером MySQL во время запроса»)

Я пытался подключиться к ClouSQL с помощью гибких сред (vm:true)

но когда я загружаю свое приложение, используя:

gcloud preview app deploy --version MYVERSION

Выдается ошибка:

OperationalError: (2013, 'Lost connection to MySQL server during query')

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

Мой код:

import os
import logging
import pymysql

class MySQL(object):
    '''
    classdocs
    '''
    # TO INSTALL LOCAL DB: http://stackoverflow.com/questions/30893734/no-module-named-mysql-google-app-engine-django


    @classmethod
    def getConnection(cls):
        # When running on Google App Engine, use the special unix socket
        # to connect to Cloud SQL.
        if os.getenv('SERVER_SOFTWARE', '').startswith('Google App Engine/'):
            logging.debug('PROJECT [%s], INSTANCE[%s] - USER [%s] - PASS [%s], SCHEMA [%s]',
                          os.getenv('CLOUDSQL_PROJECT'),
                          os.getenv('CLOUDSQL_INSTANCE'),
                          os.getenv('CLOUDSQL_USER'),
                          os.getenv('CLOUDSQL_PASS'),
                          os.getenv('CLOUDSQL_SCHEMA'))

            db = pymysql.connect(unix_socket='/cloudsql/APP:REGION:INSTANCENAME')
                    #os.getenv('CLOUDSQL_PROJECT'),
                    #os.getenv('CLOUDSQL_INSTANCE')), 
                    #user=os.getenv('CLOUDSQL_USER'),
                    #passwd=os.getenv('CLOUDSQL_PASS'),  
                    #db=os.getenv('CLOUDSQL_SCHEMA'))
        # When running locally, you can either connect to a local running
        # MySQL instance, or connect to your Cloud SQL instance over TCP.
        else:
            db = pymysql.connect(host=os.getenv('DBDEV_HOST'), user=os.getenv('DBDEV_USER'), 
                                 passwd=os.getenv('DBDEV_PASS', ''), db=os.getenv('DBDEV_SCHEMA'))

        return db

Есть мысли по этому поводу?

Спасибо!


person SupimpaAllTheWay    schedule 26.06.2016    source источник


Ответы (1)


загляните в свой my.cnf в каталоге /etc/mysql/ и измените параметр max_allowed_packet и установите значение выше. то вы должны перезапустить базу данных

вы также можете изменить это значение через SQL следующим образом:

MariaDB [yourSchema]> show GLOBAL variables like 'max_allowed_packet';
+--------------------+---------+
| Variable_name      | Value   |
+--------------------+---------+
| max_allowed_packet | 2097152 |
+--------------------+---------+
1 row in set (0.00 sec)

MariaDB [yourSchema]> SET GLOBAL max_allowed_packet=2*2097152;
Query OK, 0 rows affected (0.00 sec)

MariaDB [yourSchema]> show GLOBAL variables like 'max_allowed_packet';
+--------------------+---------+
| Variable_name      | Value   |
+--------------------+---------+
| max_allowed_packet | 4194304 |
+--------------------+---------+
1 row in set (0.00 sec)

MariaDB [yourSchema]>

Руководство по MariaDB:

max_allowed_packet

Описание:

Максимальный размер в байтах пакета или сгенерированной/промежуточной строки. Буфер пакетных сообщений инициализируется значением из net_buffer_length, но может увеличиваться до max_allowed_packet bytes. Задайте размер самого большого большого двоичного объекта, кратного 1024. Если это значение изменяется, оно также должно быть изменено на стороне клиента. См. slave_max_allowed_packet для конкретного ограничения для целей репликации.

Командная строка: --max-allowed-packet=#

Область применения: глобальная

Динамический: Да

Тип данных: числовой Значение по умолчанию: 1048576 (1 МБ) ‹= MariaDB 10.1.6, 4M >= MariaDB 10.1.7, 1073741824 (1 ГБ) (на стороне клиента)

Диапазон: от 1024 до 1073741824.

person Bernd Buffen    schedule 26.06.2016
comment
Привет @Bernd Buffen и спасибо за вашу помощь, основная проблема не в том, что я запускаю его локально, я использую CloudSQL (сервис gae), и эта ошибка возникает на производстве, когда я использую этот сервис, поэтому у меня нет этого каталога смотреть на :\ . Извините, если я не понял, что вы имеете в виду. - person SupimpaAllTheWay; 26.06.2016
comment
@Dyego - вы также можете изменить его с помощью SQL. я добавил это в свой ответ - person Bernd Buffen; 26.06.2016
comment
Извините, что так поздно, я только что подключился к mysql, и он уже установил max_allowed_packet | 4194304 |. Я проголосовал за ваш ответ, потому что он помог мне исследовать проблему. Если вы думаете о чем-то еще, что может происходить, я был бы признателен за помощь. :) Спасибо. - person SupimpaAllTheWay; 28.06.2016
comment
@Dyego - вы тестировали с большим размером? размер не является абсолютным, он зависит от одной строки sql в вашем файле SQL. поэтому возможно, что вы должны установить его на 1 ГБ - person Bernd Buffen; 29.06.2016