从GAE连接在计算引擎实例上运行的mysql服务器

从GAE连接在计算引擎实例上运行的mysql服务器,mysql,python-2.7,google-app-engine,google-compute-engine,Mysql,Python 2.7,Google App Engine,Google Compute Engine,如何与运行在google app Engine计算引擎实例上的mysql服务器通信?我们使用谷歌应用引擎作为前端。我们希望将数据库托管在运行计算引擎的mysql服务器上。有没有办法做到这一点 我们经历了这样的过程: 代码段: if (os.getenv('SERVER_SOFTWARE') and os.getenv('SERVER_SOFTWARE').startswith('Google App Engine/')): db=MySQLdb.connect(host="Intern

如何与运行在google app Engine计算引擎实例上的mysql服务器通信?我们使用谷歌应用引擎作为前端。我们希望将数据库托管在运行计算引擎的mysql服务器上。有没有办法做到这一点

我们经历了这样的过程:

代码段:

if (os.getenv('SERVER_SOFTWARE') and
  os.getenv('SERVER_SOFTWARE').startswith('Google App Engine/')):
  db=MySQLdb.connect(host="InternalIP", port=3306, db='test_database', user='root',passwd="db_password")
else:
  db = MySQLdb.connect(host='127.0.0.1', port=3306, db='test_database', user='root', charset='utf8')

cursor = db.cursor()
logging.info("Hey there looks like I am connected")

如果您在Appengine中运行此代码,那么这是不可能的,因为Appengine不允许自定义套接字连接。您需要为此实例使用托管VM

幸运的是,从Appengine迁移到托管VM实例非常简单。 在app.yaml上,您只需添加vm:true

module: default

runtime: python27
api_version: 1
threadsafe: yes 
vm: true
default_expiration: 1h

handlers:

# Main script
- url: .*
  script: main.main_app
  login: required
使用以下命令部署它(从):

伊戈尔的《如何让它工作》;我已经成功地制作了一个可以工作的应用程序,对

  • 主机
    参数指定公共(外部)IP地址,而不是
    unix\u套接字
  • 将MySQLdb替换为。特别是,您希望将
    pymysql
    目录从该GitHub repo复制到您的应用程序目录中。使用
    pymysql
    也意味着您不需要将
    MySQLdb
    添加到app.yaml的
    库:
    部分
  • connections.py
    中的第52行周围,更改以下行:

    if _py_version == (2, 7) and not IRONPYTHON
    

  • 您可能需要更改MySQL中的MySQL权限授予,以允许从进行访问

  • 之所以需要这种解决方法,是因为appenginesockets库没有实现
    pymysql
    中的
    \u socketio
    包装器使用的一些异步IO原语。同时,appengine附带的
    MySQLdb
    模块包装了一个C库,它不知道如何使用appengine
    sockets
    库(并且可能没有编译的socket支持)


    我将看看后一种组合是否可以解决,但同时,上述3个步骤应提供一种解决方法,可用于连接到您自己的MySQL或。

    计算引擎VM具有IP地址,因此您可以使用TCP/IP(另外,为安全起见,不要忘了TLS)对于通信,您遇到了什么问题?文档中有一个示例留言簿应用程序:@BrianMichelich topicstarter使用自定义mysql服务器,部署在自己的机器上。不是CloudSQL@Kartik请看应用程序引擎可以连接到云sql:并且付费应用程序可以使用套接字:在谈到谷歌云平台时,云sql和MySQL实例之间存在着非常大的差异。CloudSQL是GCP提供的一项服务,可以使用自己的客户端库或通过RESTAPI使用。MySQL intance需要使用服务器和开放端口。现在关于插座。。。请阅读在您提供的同一链接上使用appengine套接字的“限制和限制”。“您不能绑定到特定的IP地址或端口。”让我知道如何在不绑定appengine上的MySQL服务器的情况下连接到远程MySQL服务器,以便我记下笔记。@SugarRayTenorio在托管虚拟机中如何在计算引擎上连接到MySQL?我们遇到以下错误:OperationalError:(2003,“无法连接到'10.240.0.2'上的MySQL服务器([Errno 13]权限被拒绝)”。它允许在shell中使用相同的用户名和密码进行连接。错误已解决。我们使用了错误的ip范围。需要向远程源授予权限。授予。到“根”@“%”;刷新权限;应使用外部ip进行连接。您需要使用外部ip地址并允许在mys上进行连接ql侧。更新了我的答案,谢谢!
    if _py_version == (2, 7) and not IRONPYTHON
    
    if _py_version == (2, 7) and not IRONPYTHON and not os.getenv('SERVER_SOFTWARE', '').startswith('Google App Engine'):