Cloud SQL Access被拒绝

时间:2014-06-11 20:26:00

标签: mysql python-2.7 google-app-engine google-cloud-sql

import webapp2
import MySQLdb
import os

class MainPage(webapp2.RequestHandler):
def get(self):
    if (os.getenv('SERVER_SOFTWARE') and
        os.getenv('SERVER_SOFTWARE').startswith('Google App Engine/')):
        db = MySQLdb.connect(unix_socket='/cloudsql/fluent-outlet-604:test-db' , db='guestbook', user='root',passwd='root')
        # connect to the cloud SQL
    else:
        db = MySQLdb.connect(host='173.194.248.221', port=3306, db='guestbook', user='root',passwd='root')

    cursor = db.cursor()
    cursor.execute('SELECT guestName, content, entryID FROM entries')

    data = cursor.fetchall()
    db.close()
    self.response.write(data)

    application = webapp2.WSGIApplication([
         ('/',MainPage),
    ],debug=True)

当我将此应用程序部署到应用程序引擎时,我获得错误说 "(1045,"拒绝访问用户' root' @' localhost'(使用密码:是)")

3 个答案:

答案 0 :(得分:1)

我有同样的问题,并解决了它。 此问题出在Google Cloud SQL上。

在提示控制台中,重新启动Cloud SQL,如下所示,

gcloud sql instances --project [app engine project name] restart [sql instance name]

答案 1 :(得分:0)

从AppEngine连接时,不应指定root密码(即使已设置)。

从代码的第9行中删除 passwd 参数,使其如下所示:

db = MySQLdb.connect(unix_socket='/cloudsql/fluent-outlet-604:test-db' , db='guestbook', user='root')

this article中的示例代码也显示了这一点。

答案 2 :(得分:0)

当我没有在数据库URI中指定主机名时,我看到了这个问题:

SQLALCHEMY_DATABASE_URI = (
            'mysql+pymysql://<user-name>:<password>@/<database-name>'
            '?unix_socket=/cloudsql/<connection_name>'

将其更改为以下内容可修复该问题:

SQLALCHEMY_DATABASE_URI = (
            'mysql+pymysql://<user-name>:<password>@<host-name>/<database-name>'
            '?unix_socket=/cloudsql/{connection_name}'