在 Flink 中使用 mysql-connector-java:连接到 mysql 时找不到合适的驱动程序 >= 8.0.16



我正在编写一个简单的Flink程序,将数据从MySQL移动到Mongo。

我使用的是mysql连接器java8.0.16。

问题

当我尝试连接到我们的测试环境数据库(MySQL 8.0.15(时,程序运行得很好。连接字符串如下所示:

jdbc:mysql://my-test-db-url:3306/my_db_name

但一旦我将它连接到我们的生产数据库(MySQL 8.0.16(,我就得到了:

java.sql.SQLException: No suitable driver found for jdbc:mysql://my-prod-db-url:3306/my_db_name

这些数据库的唯一区别是次要版本(15和16(。

我尝试过的

升级测试数据库以匹配生产数据库版本

我将测试数据库升级到8.0.16,看看那个版本的mysql服务器是否有问题。事实上,现在我也无法连接到测试数据库,得到了同样的异常。

之后,我继续将mysqlconnectorjava和testdb升级到8.0.17,但问题仍然存在。

在我的其他项目中,我可以很好地连接到那些mysql数据库(使用spring-data-jpa和mysql-connector java8.0.18(。所以数据库服务器应该不会有任何问题。

手动将mysql-connector java jar放入flink/lib文件夹

这不起作用

在main类中手动注册驱动程序和我的mysql源函数的open方法

在主类中没有抛出错误

// tried both
Class.forName("com.mysql.jdbc.Driver").newInstance();
Class.forName("com.mysql.cj.jdbc.Driver").newInstance();

我还确保在运行maven包后,我的胖罐子确实包含连接器类文件。

现在我几乎一无所知。有人请救我。

我遇到了这个问题,并注意到flink上有一个BUG JIRA:https://issues.apache.org/jira/browse/FLINK-20540.它提供了一条线索:

实例化JdbcCatalog时,baseUrl必须是endswith/。

我试图更改baseUrl,它对我有效。

在调用DriverManager.getConnection之前,我使用Class.forName("org.sqlite.JDBC")解决了相同的问题(我使用的是sqlite(。这几乎和您尝试过的一样,但没有调用newInstance()

相关内容

  • 没有找到相关文章

最新更新