我正在尝试通过数据流作业将本地Mysql的数据吸收到Bigquery,但是它无法连接和获取数据。有人遇到过类似的问题吗?

这是我使用的代码


  gcloud数据流作业运行mariadb_to_bigquery --gcs-location
  gs:// dataflow-templates / latest / Jdbc_to_BigQuery
  --parameters = driverJars = gs://xxxxxx-xxxxx/mysql-connector-java-8.0.17.jar,driverClassName=com.mysql.jdbc.Driver,connectionURL='jdbc:mysql://127.0.0.1:3306 / classicmodels?user = root&password = xxxxx',query ='select
  *来自客户的outputTable = xxxxxx-xxxxx-******:ds010.customers,bigQueryLoadingTemporaryDirectory = gs:// xxxxxx-xxxxx-****** / my-files / temp-dir


java.lang.RuntimeException: org.apache.beam.sdk.util.UserCodeException: java.sql.SQLException: Cannot create PoolableConnectionFactory (Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
    at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:817)
    ... 38 more
Caused by: java.net.ConnectException: Connection refused
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:204)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:155)
    at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:65)
    ... 41 more

Thanks,
Srikanth

最佳答案

编辑:我的一个队友强烈建议使用VPC网络方法,因为暴露外部mySQL端点会使DB处于DDOS和暴力登录攻击的风险中。

由于数据流作业在GCE VM实例上运行,因此它与使用localhost / 127.0.0.1连接到的JDBC端点不在同一台计算机上。

VPC上的专用IP网络方法


设置a VPC network,并在VPC网络上使用专用IP连接到JDBC实例,而不是在单独的网络上使用JDBC实例的外部IP地址。请参阅:VPC Network PeeringCloud VPN
您可能需要a firewall rule as well,以允许与GCP网络对等的网络上的流量。
启动模板时,请指定--network name参数。



gcloud dataflow jobs run <job_name> --gcs-location <template_location>
--parameters=network=<my_network>,param2=<value>,...



外部IP方法(由于DDOS和暴力风险,不建议使用)您需要提供一个外部IP地址,并且:


create a custom network并为其命名。
Define a firewall rule to allow egress TCP connections to your specific port on an external host,用于数据流VM标签。



gcloud compute firewall-rules create vm1-allow-egress-tcp-port3306-to-192-0-2-5 \
    --network my-network \
    --action allow \
    --direction egress \
    --rules tcp:3306 \
    --destination-ranges 192.0.2.5/32 \
    --priority 70 \
    --target-tags dataflow




启动模板时,请指定--network name参数。



gcloud dataflow jobs run <job_name> --gcs-location <template_location>
--parameters=network=<my_network>,param2=<value>,...



您可能需要使用subnet calculator正确计算目标范围


您可能同样需要配置mySQL实例或网络以允许此连接。


同样,在运行整个数据流程序之前,在与数据流实例相同的网络上创建VM可能更简单,ssh并尝试使用小型JDBC Java程序测试jdbc连接。快速排除故障。

10-02 08:46
查看更多