无法从 Data Fusion 连接 Cloud SQL mySql / postgreSQL 实例
Posted
技术标签:
【中文标题】无法从 Data Fusion 连接 Cloud SQL mySql / postgreSQL 实例【英文标题】:Unable to connect Cloud SQL mySql / postgreSQL instance from Data Fusion 【发布时间】:2019-12-10 00:29:43 【问题描述】:目标是使用 Cloud Data Fusion 连接 Cloud SQL mysql 或 postgreSQL 实例。
使用 MySQL 和 postgreSQL 创建 Cloud SQL 实例 已创建 Cloud Data Fusion 实例 从牧马人 > 添加连接 > Cloud SQL MySQL 在 IAM 中添加了 Data Fusion 实例作为成员,并添加了以下权限 云 SQL 客户端 Cloud Data Fusion API 服务代理 在添加连接时使用 jdbc url 作为 jdbc:mysql://google/mysql?cloudSqlInstance=&socketFactory=com.google.cloud.sql.mysql.SocketFactory&useSSL=false 为 mySQL 添加了驱动程序:mysql-connector-java-5.1.39-bin.jar 添加了 MySQL 套接字工厂 jar 作为库。在测试连接时,它失败并出现错误:com.mysql.jdbc.Driver
期待与Cloud SQL MySQL的连接测试成功,以便构建数据融合管道。
【问题讨论】:
Can't connect Cloud Data Fusion with Google Cloud SQL for PostgreSQL的可能重复 【参考方案1】:问题是您需要提供一个包含驱动程序和连接器的 jar。您可以找到有关如何使用驱动程序和 JDBC Socket Factory from this post here 构建 uberjar(也称为 farjar)的说明。
编辑:这是 MySQL 的 POM:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>mysql-with-cloud-sql-socket-factory</artifactId>
<packaging>pom</packaging>
<version>0.0.1</version>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
<dependency>
<groupId>com.google.cloud.sql</groupId>
<artifactId>mysql-socket-factory-connector-j-8</artifactId>
<version>1.0.14</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4.1</version>
<configuration>
<!-- get all project dependencies -->
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<!-- bind to the packaging phase -->
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
【讨论】:
感谢@kurtisvg 的回复。我已经看完了这篇文章,但我不知道怎么做这个胖罐子。请原谅我的java技能。我有 mySQL 和 postgreSQL 的驱动程序 jar,可能需要嵌入套接字工厂 jar。是否有任何已经可用的 uber jar / fat jar 版本?或者更详细的步骤如何制作?你能帮忙吗? @deba - 我在原始答案中为 MySQL 添加了一个 pom。你可以把这个POM.xml放到一个空文件夹中,然后使用mvn package
命令在本地创建jar。
嗨@kurtisvg!非常感谢您的回复。我按照您对 mysql 的建议创建了 jar,对您提供的 pom 文件中的连接器版本稍作更改。我同时使用了 mysql-connector-java:8.0.17
与mysql-socket-factory-connector-j-8:1.0.14
一起使用。验证您的版本号,然后尝试mvn clean package
。【参考方案2】:
看到“error: com.mysql.jdbc.Driver not found”有点烦人,没有更多可以指出根本原因的东西。尽管如此,Data Fusion 中的错误消息是正确的,因为当包为manually built 时,不包含 mysql Driver 类。问题来自这一行:
<scope>provided</scope>
在cloud-sql-jdbc-socket-factory/connector-j-8/pom.xml 文件中,这意味着目标包将不包含mysql-connector-java
jar 文件、包含com.mysql.jdbc.Driver
的jar 文件等。如果你在没有上述行的情况下构建 jar 连接器,则可以解决该错误。
【讨论】:
以上是关于无法从 Data Fusion 连接 Cloud SQL mySql / postgreSQL 实例的主要内容,如果未能解决你的问题,请参考以下文章
Google Cloud Data Fusion 无法访问其他项目的数据,即使已授予访问权限
Google Cloud Data Fusion 将 Excel 提取到 Bigquery
Google Cloud Data Fusion,如何在一个管道中将多个表加载到 bigquery
从本地 MySQL 工作台连接 Cloud SQL MySQL - 连接成功但无法连接数据库服务器
我无法从我的颤振项目中访问我的 firebase/firecloud 数据。我得到:无法访问 Cloud Firestore 后端。连接失败 1 次