从Python中的数据流连接到CloudSQL

时间:2018-12-18 16:05:34

标签: python google-cloud-platform google-cloud-dataflow google-cloud-sql

我正在尝试通过python管道连接到CloudSQL。


实际情况

  • 我可以使用DirectRunner毫无问题地做到这一点
  • 我无法使用DataflowRunner连接

连接功能

def cloudSQL(input):
    import pymysql
    connection = pymysql.connect(host='<server ip>',
                                   user='...',
                                   password='...',
                                   db='...')
    cursor = connection.cursor()
    cursor.execute("select ...")
    connection.close()
    result = cursor.fetchone()
    if not (result is None):
        yield input

错误

这是使用DataflowRunner的错误消息

OperationalError: (2003, "Can't connect to MySQL server on '<server ip>' (timed out)")

CloudSQL

我有publicIP(要使用Directrunner从本地进行测试),并且我还尝试激活私有IP,以查看这是否可能是与DataflowRunner连接的问题


选项2

我也尝试过

connection = pymysql.connect((unix_socket='/cloudsql/' + <INSTANCE_CONNECTION_NAME>,
                               user='...',
                               password='...',
                               db='...')

出现错误:

OperationalError: (2003, "Can't connect to MySQL server on 'localhost' ([Errno 2] No such file or directory)")

3 个答案:

答案 0 :(得分:0)

看看Cloud SQL Proxy。它将创建一个本地入口点(Unix套接字或TCP端口,具体取决于您的配置),以代理和验证与Cloud SQL实例的连接。

答案 1 :(得分:0)

您必须像此StackOverflow answer

中所述,在Python中模拟JdbcIO.read()的实现。

答案 2 :(得分:0)

借助此solution,我可以访问CloudSQL。

出于测试目的,您可以在不使用证书的情况下向CloudSQL publicIP添加0.0.0.0/0