从Python访问Gcloud MySQL时连接超时

2024-10-04 11:35:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python应用程序,我试图访问谷歌云服务上的MySQL数据库

我一直遵循这个set up guide通过外部应用程序(Python)进行连接,我正在使用pymysql包。我正在尝试通过代理进行连接,并且已经通过gcloud auth登录从控制台验证了我的连接

到目前为止,我可以通过控制台访问数据库,但我需要能够从python脚本中进行查询以构建它。当我尝试按原样运行时,会出现以下错误: 操作错误:(2003,“无法连接到'34.86.47.192'上的MySQL服务器(超时)”

以下是我正在使用的函数,其中列出了安全敏感信息:

def uploadData():
    # cd to the directory with the MySQL exe
    os.chdir('C:\\Program Files\\MySQL\\MySQL Server 8.0\\bin')  
    # Invoke the proxy 
    subprocess.call('start cloud_sql_proxy_x64.exe -instances=trans-cosine-289719:us-east4:compuweather', shell=True)
    # Create connection    
    # I have also tried host = '127.0.0.1' for localhost here
    conn = pymysql.connect(host='34.86.47.192',
                                 user='root',
                                 password='*******',
                                 db='gribdata')
    try:
        c = conn.cursor()
        # Use the right databse
        db_query = 'use gribdata'
        c.execute(db_query)
        query = 'SELECT * FROM clients'
        c.execute(query)
        result = c.fetchall()
        print(result)
    except Error as e:
        print(e)
    finally:
        conn.close()

Tags: the数据库应用程序hostexecutedb错误mysql
3条回答

是的,这一个在文档中非常有限,但您要做的是从它的托管IP运行它,并配置对服务器上的外部IP地址的访问。因此,您希望使用该IP(34.xxx.xxx.xxx)而不是环回127本地主机IP

要使其正常工作,您需要转到“连接”选项卡并在Gcloud中添加新连接。确保选中公共地址框,IP正确,并在完成后保存

enter image description here

一些Gcloud工程师提供了一些非常好的细节。看起来有些源文档已经过时,这是现在连接的方式

首先,确认云SQL代理确实安装在您期望的目录中。云SQL代理不是MySQL服务器的一部分,因此至少在默认情况下,您不应该在C:\\Program Files\\MySQL\\MySQL Server 8.0\\bin中找到它。相反,云SQL代理是Google提供的一个工具,它只是一个.exe文件,可以存储在您想要的任何目录中。有关如何下载代理的说明,请查看docs

云SQL代理在云SQL实例和您的计算机之间创建安全链接。它所做的是将计算机中的本地端口转发到云SQL实例。因此,如果您正在使用代理,那么应该使用的主机IP是127.0.0.1

conn = pymysql.connect(host='127.0.0.1',
                             user='root',
                             password='*******',
                             db='gribdata')

使用TCP套接字启动云SQL代理时,应该在start命令=tcp:3306的末尾添加要转发云SQL流量的端口

subprocess.call('start cloud_sql_proxy_x64.exe -instances=trans-cosine-289719:us-east4:compuweather=tcp:3306', shell=True)

您是否尝试过从控制台连接CloudSQL?连接后,控制台中会显示一条消息“Listing on 127.0.0.1:3306”。您的连接命令应为

“cloud_sql_proxy_x64.exe-instances=trans-cosine-289719:us-east4:compuweather=tcp:3306”

尝试从控制台连接云代理,并尝试创建与pymysql的连接。使用“127.0.0.1”

相关问题 更多 >