2016-06-26 6 views
3

나는 유연한 환경을 사용하여 ClouSQL에 연결하려고했습니다 (VM : TRUE)GAE 파이썬 - OperationalError : (2013, '쿼리시 MySQL 서버에 연결이 끊어졌습니다')

하지만 사용하여 내 응용 프로그램을 업로드 할 때 :

gcloud preview app deploy --version MYVERSION 

오류가 발생합니다 :

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

내가 '쿼리가 너무 큰하지만 난 그것을 로컬로 작동하기 때문에 그런 경우가 아니라 생각과 생산에 내가 WAN을 때 때문에이 될 수 있음을 발견 ~ 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 

어떤 생각?

감사합니다!

답변

1

/etc/mysql/디렉토리의 my.cnf를보고 max_allowed_packet을 변경하고 값을 더 높게 설정하십시오.

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

Description:

Maximum size in bytes of a packet or a generated/intermediate string. The packet message buffer is initialized with the value from net_buffer_length, but can grow up to max_allowed_packet bytes. Set as large as the largest BLOB, in multiples of 1024. If this value is changed, it should be changed on the client side as well. See slave_max_allowed_packet for a specific limit for replication purposes.

Commandline: --max-allowed-packet=#

Scope: Global

Dynamic: Yes

Data Type: numeric Default Value: 1048576 (1MB) <= MariaDB 10.1.6, 4M >= MariaDB 10.1.7, 1073741824 (1GB) (client-side)

Range: 1024 to 1073741824

+0

안녕 @Bernd Buffen 여러분의 도움을 주셔서 감사합니다, 주요 문제 다음은이 같은 SQL을 통해이 값을 변경할 수 있습니다

데이터베이스를 다시 시작해야합니다 로컬로 실행하고 있지 않습니다. CloudSQL (gae 서비스)을 사용하고 있습니다.이 서비스를 사용하고있을 때 프로덕션 환경에서이 오류가 발생하므로이 디렉토리를 볼 필요가 없습니다. 미안, 너 무슨 뜻인지 몰랐어. – SupimpaAllTheWay

+0

@Dyego - SQL을 통해 변경할 수도 있습니다. 내 대답에 그것을 추가했습니다 –

+0

죄송합니다 너무 늦었 어, 방금 MySQL에 연결되어 있고 이미 "max_allowed_packet | 4194304 |"설정되어 있습니다. 나는 그 문제를 조사하는 데 도움이 되었기 때문에 답을 upvoted. 일어날 수있는 다른 일을 생각하면 도움을 주시면 고맙겠습니다. :) 감사. – SupimpaAllTheWay