runtimeerror:operationalerror:(2003,无法连接到'ipaddress of the instance'上的mysql服务器

qlckcl4x  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(504)

我正在尝试运行一个python(version2.7.1')脚本,其中我使用pymysql包从csv文件创建一个表到数据库中。
它在我的本地系统中运行正常,但是,当运行与google云数据流中的管道部分相同的脚本时,问题就出现了。
我的python函数如下:

class charge_to_db(beam.DoFn):
    def process(self, element):
        import pymysql

        with open(element, 'r') as f:
            data = f.read().decode("UTF-8")

        datalist = []
        for line in data.split('\n'):
            datalist.append(line.split(','))

        db = pymysql.connect(host='IPaddress', user='root', password='mypassword', database='stack_model')

        cursor = db.cursor()
        cursor.execute("DROP TABLE IF EXISTS stack_convergence")

        # create column names from the first line in fList
        up = "upper_bnd"
        primal = "primal"
        d = "dualit"
        gap = "gap_rel"
        teta = "teta"
        alpha = "alpha"
        imba = "imba_avg"
        price = "price_avg"
       # create STUDENT table // place a comma after each new column except the last
       queryCreateConvergenceTable = """CREATE TABLE stack_convergence(
                                {} float not null,
                                {} float not null,
                                {} float not null,
                                {} float not null,
                                {} float not null,
                                {} float not null,
                                {} float not null,
                                {} float not null )""".format(up, primal, d, gap, teta, alpha, imba, price)

        cursor.execute(queryCreateConvergenceTable)

在云中运行此函数时,我得到以下错误:

RuntimeError: OperationalError: (2003, 'Can\'t connect to MySQL server on \'35.195.1.40\' (110 "Connection timed out")')

我不知道为什么会发生这个错误,因为它在本地系统中正确运行,所以我可以从本地系统访问我的云sql示例,但不能从云中的数据流访问。
为什么会发生这种错误?

zzwlnbp8

zzwlnbp81#

在dataflow上,不能将ip列入白名单,以使dataflow能够访问sql示例。如果您要使用java,最简单的方法就是使用jdbcio/jdbc套接字工厂。
但是,既然您使用的是python,那么使用特定于python的数据库连接工具来模拟jdbcio.read()的实现会有所帮助。在更改了一些cloudsql设置并添加了相关的python代码之后,有一个解决方法与此相关。
如果这看起来很复杂,您也可以将数据从云sql导出到云存储,然后从云存储加载。

相关问题