我正在尝试使用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)")
云数据库
我有公共IP(从本地测试与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)")
查看云SQL代理。它将创建一个本地入口点(Unix套接字或TCP端口,具体取决于您的配置),用于代理和验证与云SQL实例的连接。
您必须在Python中模拟JdbcIO.read()的实现,如StackOverflow答案中所述
使用这个解决方案,我能够访问CloudSQL。
出于测试目的,您可以将0.0.0.0/0添加到CloudSQL公共IP,而无需使用证书