2016-06-26 25 views
3

Ich habe versucht, zu ClouSQL mit Flexible Environments (vm: true) verbindenGAE Python - OperationalError: (2013, 'Verlorene Verbindung zum MySQL-Server während der Abfrage')

aber wenn ich meinen app lade ein:

gcloud preview app deploy --version MYVERSION 

wird ein Fehler ausgelöst:

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

ich fand heraus, dass es sein könnte, da die Abfrage zu groß ist, aber ich denke, das ist nicht der Fall ist, weil es vor Ort und auf die Produktion funktioniert, wenn ich wans' t Verwenden flexibler Umgebungen mit MySQLdb.

Mein Code:

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 

Irgendwelche Gedanken dazu?

Danke!

Antwort

1

werfen Sie einen Blick in Ihre my.cnf im Verzeichnis/etc/mysql/und ändern Sie den Parameter max_allowed_packet und setzen Sie den Wert höher. dann müssen Sie die Datenbank

neu starten Sie diesen Wert auch über SQL wie folgt ändern:

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 Handbuch:

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

Hallo @Bernd Buffen und vielen Dank für Ihre Hilfe, das Hauptproblem Ich benutze es nicht lokal, ich benutze CloudSQL (gae service) und dieser Fehler tritt bei der Produktion auf, wenn ich diesen Dienst benutze, also habe ich dieses Verzeichnis nicht: \. Tut mir leid, wenn ich nicht verstanden habe, was du meinst. – SupimpaAllTheWay

+0

@Dyego - Sie können es auch über SQL ändern. Ich habe es in meiner Antwort hinzufügen –

+0

Sorry für so spät, ich habe gerade mit mysql verbunden und es ist bereits gesetzt "max_allowed_packet | 4194304 |". Ich habe Ihre Antwort aufgefrischt, weil sie mir geholfen hat, das Problem zu untersuchen. Wenn Sie an etwas anderes denken, was passieren könnte, würde ich mich über die Hilfe freuen. :) Vielen Dank. – SupimpaAllTheWay