dataflow mysql到bigquery:连接拒绝



我试图通过数据流工作将数据从本地MySQL摄取到BigQuery,但它无法连接和获取数据。有人遇到类似问题吗?

这是我使用的代码

gcloud dataflow作业运行mariaDB_TO_BIGQUERY-GCS-LOCATION gs://dataflow-templates/lestest/jdbc_to_bigquery -parameters = driverjars = gs://xxxxx-xxxxxx/mysql-connector-java-8.0.0.17.jar,driverclassname = com.mysql.jdbc.driver,connectionurl =/classicmodels?user = root& password = xxxxx',query ='选择 *来自客户的',outputTable = xxxxxx-xxxxx- ******:ds010.customers,bigqueryloadingTemporaryDirectory = gs://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx的

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的风险和蛮力登录攻击。

由于DataFlow作业在GCE VM实例上运行,因此它与您使用localhost/127.0.0.1的JDBC端点不在同一机器上。

VPC网络方法的私有IP

  1. 设置VPC网络,并在VPC网络上使用专用IP连接到JDBC实例,而不是在单独的网络上使用JDBC实例的外部IP地址。请参阅:VPC网络对等或云VPN。

  2. 您可能还需要一个防火墙规则,以允许使用GCP网络在同行网络上流量。

  3. 启动模板时指定 - 网络名称参数。

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

外部IP方法(不建议由于DDOS和Bruts Forme风险而推荐(您需要提供外部IP地址,并且:

  1. 创建自定义网络并给它一个名字。
  2. 定义防火墙规则,以允许出口TCP连接到外部主机上的特定端口,用于数据流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
  1. 启动模板时指定 - 网络名称参数。
gcloud dataflow jobs run <job_name> --gcs-location <template_location>
--parameters=network=<my_network>,param2=<value>,...

您可能需要使用子网计算器来正确计算目标范围

  1. 您可能需要配置您的MySQL实例或网络以允许此连接。

此外,在运行整个数据流程序之前,在与数据流实例(SSH(上创建VM可能会更简单,并尝试使用小型JDBC Java程序来测试JDBC连接。要更快地进行故障排除。

最新更新