我正在尝试通过数据流作业将本地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 Peering或Cloud 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连接。快速排除故障。