我想将我的站点从第一代Cloud SQL实例迁移到第二代,这是旧的配置:
DATABASES['[DATABASE_NAME]'] = {
'ENGINE': 'google.appengine.ext.django.backends.rdbms',
'INSTANCE': '[PROJECT_ID]:[INSTANCE_ID_1stGEN]',
'NAME': '[DATABASE_NAME]',
'USER': [MY_USER],
'PASSWORD': [MY_PASSWORD],
}
这工作正常,现在我尝试使用以下代码:
DATABASES['[DATABASE_NAME]'] = {
'ENGINE': 'django.db.backends.mysql',
'HOST': '/cloudsql/[PROJECT_NAME]:[REGION]:[INSTANCE_ID]',
'NAME': '[DATABASE_NAME]',
'USER': [MY_USER],
'PASSWORD': [MY_PASSWORD]
}
此代码
DATABASES['[DATABASE_NAME]'] = { # 2da gen no funciono error COUNT_ROWS
'ENGINE': 'django.db.backends.mysql',
'HOST': '[PROJECT_ID]:[REGION]:[INSTANCE_ID]',
'NAME': '[DATABASE_NAME]',
'USER': [MY_USER],
'PASSWORD': [MY_PASSWORD]
}
这是错误:
AttributeError at /
'module' object has no attribute 'FOUND_ROWS'
/base/alloc/tmpfs/dynamic_runtimes/python27g/79cfdbb680326abd/python27/python27_lib/versions/third_party/django-1.5/django/db/backends/mysql/base.py in _cursor
kwargs['client_flag'] = CLIENT.FOUND_ROWS
请帮助我。
Django版本1.5很旧
我发现错误,引擎错误,我将其替换为google.appengine.ext.django.backends.rdbms
:
DATABASES['[DATABASE_NAME]'] = {
'ENGINE': 'google.appengine.ext.django.backends.rdbms',
'HOST': '/cloudsql/[PROJECT_ID]:[REGION]:[INSTANCE_ID]',
'NAME': '[DATABASE_NAME]',
'USER': [MY_USER],
'PASSWORD': [MY_PASSWORD]
}
但是它仍然失败,现在它说需要一个INSTANCE密钥,然后我将INSTANCE替换为HOST:
DATABASES['[DATABASE_NAME]'] = {
'ENGINE': 'google.appengine.ext.django.backends.rdbms',
'INSTANCE': '/cloudsql/[PROJECT_ID]:[REGION]:[INSTANCE_ID]',
'NAME': '[DATABASE_NAME]',
'USER': [MY_USER],
'PASSWORD': [MY_PASSWORD]
}
...什么都没有...
DATABASES['[DATABASE_NAME]'] = {
'ENGINE': 'google.appengine.ext.django.backends.rdbms',
'INSTANCE': '[PROJECT_ID]:[REGION]:[INSTANCE_ID]',
'NAME': '[DATABASE_NAME]',
'USER': MY_USER,
'PASSWORD':MY_PASSWORD
}
尝试此操作,现在又出现另一个错误:
InternalError at /
(0, u'Not authorized to access instance: [PROJECT_ID]:[REGION]:[INSTANCE_ID]')
/base/alloc/tmpfs/dynamic_runtimes/python27g/79cfdbb680326abd/python27/python27_lib/versions/1/google/storage/speckle/python/api/rdbms.py in MakeRequest
request.request_id = self._idempotent_request_id
response = self._MakeRetriableRequest(stub_method, request)
else:
response = self.MakeRequestImpl(stub_method, request)
if (hasattr(response, 'sql_exception') and
response.HasField('sql_exception')):
raise _ToDbApiException(response.sql_exception) ...
return response
def _MakeRetriableRequest(self, stub_method, request):
"""Makes a retriable request.
添加SSL / TSL配置:
DATABASES['[DATABASE_NAME]'] = {
'ENGINE': 'google.appengine.ext.django.backends.rdbms',
'INSTANCE': '[PROJECT_ID]:[REGION]:[INSTANCE_ID]',
'NAME': '[DATABASE_NAME]',
'USER': [MY_USER],
'PASSWORD': [MY_PASSWORD],
'OPTIONS': {'ssl': {
'key': '/servidor/[INSTANCE_ID]/client-key.pem',
'cert': '/servidor/[INSTANCE_ID]/client-cert.pem',
'ca': '/servidor/[INSTANCE_ID]/client-ca.pem',
}}
我仍然遇到相同的错误。
证书正在运行,使用MySQL Workbench没问题。
答案 0 :(得分:1)
如documentation所述,rdbms库不适用于升级的第二代Cloud SQL实例。为了将Sencond Generation Cloud SQL实例连接到App Engine Standard应用程序,请确保您的服务帐户具有正确的权限,并使用Unix域套接字。所有相关信息都可以在here中找到。