我正在尝试通过python管道连接到CloudSQL。
实际情况
连接功能
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)")
答案 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