繁体   English   中英

在 Linux Z3D945423F8E9496C404FZD5 中使用 Apache NiFi 时无法连接到 MySQL 数据库

[英]Not able to connect to MySQL database when using Apache NiFi in Linux Ubuntu

我正在尝试使用 Linux Z3D945423F8E94946C8上的Apache NiFi连接到 AWS 中的MySQL RDS 实例

MySQL 数据库位于 SSH 隧道后面,该隧道在专用终端中工作。 MySQL 数据库可通过另一个 Linux 终端访问。

$ ssh -i /home/bernardo/.ssh/sshbernardo3.pem -N \
-L 33061:<db_name>.<id>.eu-west-1.rds.amazonaws.com:3306 \
<user>@<ip_address> -p <port>

我已从https://downloads.mysql.com/archives/cj/上传并解压缩 JDBC 驱动程序

文件java.sql.Driver位于Linux的目录/usr/share/java/META-INF/services

我已经在 Linux 中安装了 jdbc 连接器并设置用户使用 JDBC

$ sudo apt-get install libmysql-java
$ cd /home/bernardo
$ gedit .bashrc

在文件末尾添加以下行:

# Setting up the user to use JDBC
CLASSPATH=$CLASSPATH:/usr/share/java/mysql-connector-java-8.0.26.jar
export CLASSPATH

然后来源它:

$ source .bashrc

在 NiFi 中,我使用了 DBCPConnectionPool1.15.2 controller 服务,其配置如下:

• 数据库连接 URL: jbdc:mysql://127.0.0.1:33061/<db_name>

• 数据库驱动程序 Class 名称: java.sql.Driver

• 数据库驱动程序位置: /usr/share/java/META-INF/services

• 数据库用户: <db_user>

• 密码: <db_password>

启用 controller 服务时,出现以下错误:

StandardControllerServiceNode[service=DBCPConnectionPool[id=2440f624-017e-1000-9467-8bb12dda6ca6], name=<controller_service_name>, active=true] Failed to invoke @OnEnabled method due to java.lang.NoSuchMethodException: java.sql.Driver.( ) causes: java.lang.InstantiationException: java.sql.Driver causes: org.apache.nifi.processor.exception.ProcessException: Creating driver instance is failed: Creating driver instance is failed

有什么提示吗?

这是我安装的软件:

  • Linux Ubuntu 18.04.6 在 VirtualBox 6.1 之上 Windows 10 Pro

  • openjdk 版本“11.0.13” 2021-10-19

  • javac 11.0.13

  • nifi-1.15.2

谢谢,

贝尔纳多


编辑于 2022 年 1 月 6 日 08:50 UTC

我对 DBCPConnectionPool1.15.2 controller 服务配置做了如下改动:

• 数据库驱动程序 Class 名称: com.mysql.cj.jdbc.Driver

• 数据库驱动程序位置: /usr/share/java/mysql-connector-java-8.0.26.jar

其他参数不变:

• 数据库连接 URL: jbdc:mysql://127.0.0.1:33061/<db_name>

• 数据库用户: <db_user>

• 密码: <db_password>

文件mysql-connector-java-8.0.26.jar位于/usr/share/java

还:

$ cat /usr/share/java/META-INF/services/java.sql.Driver
com.mysql.cj.jdbc.Driver

和:

$ netstat -nplt

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

tcp 0 0 127.0.0.1:33061 0.0.0.0:* LISTEN 4873/ssh
tcp6 0 0 ::1:33061 :::* LISTEN 4873/ssh

我仍然收到一个错误(这次是一个新错误):

原因:org.apache.nifi.processor.exception.ProcessException:没有适合给定数据库连接的驱动程序URL

访问驱动程序 jar 文件的权限:

bernardo@BDi-laptop:/usr/share/java$ ls -l

-rwxrwxr-- 1 bernardo bernardo 2462344 gen  4 19:01 mysql-connector-java-8.0.26.jar

编辑于 2022 年 1 月 6 日 10:21 UTC

在 /etc/environment 中也添加了 CLASSPATH 变量

bernardo@BDi-laptop:/usr/share/java$ echo $CLASSPATH
.:/usr/share/java/mysql-connector-java-8.0.26.jar:/usr/share/java/mysql-connector-java-8.0.26.jar

编辑于 2022 年 1 月 7 日 09:08 UTC

我认为这可能是与驱动程序版本有关的问题,所以我重新安装了 jdbc 驱动程序。 我已经从旧的 sql 相关文件中清理了/home/bernardo/Download/usr/share/java 然后我又完成了安装。

安装 jdbc 连接器

$ sudo apt-get install libmysql-java

.jar文件在/usr/share/java/mysql-connector-java-5.1.45.jar解压.jar文件

$ sudo jar xvf /usr/share/java/mysql-connector-java-5.1.45.jar

要查找驱动程序 class 名称,请打开/usr/share/java/META-INF/services/java.sql.Driver

$ cat /usr/share/java/META-INF/services/java.sql.Driver

com.mysql.jdbc.Driver

com.mysql.fabric.jdbc.FabricMySQLDriver

驱动class名称为: com.mysql.jdbc.Driver

这是 Apache Ni-Fi 中 DBCPConnectionPool1.15.2 controller 服务中的更新配置:

• 数据库驱动程序 Class 名称: com.mysql.jdbc.Driver

• 数据库驱动程序位置: /usr/share/java/mysql-connector-java-5.1.45.jar

• 数据库连接 URL: jbdc:mysql://127.0.0.1:33061/<db_name>

• 数据库用户: <db_user>

• 密码: <db_password>

我得到了同样的结果:

原因:org.apache.nifi.processor.exception.ProcessException:没有适合给定数据库连接的驱动程序URL

然后我检查了问题是否出在SSH 隧道中。

$ netstat -nplt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address          State       PID/Program name    
tcp        0      0 127.0.0.1:33061         0.0.0.0:*               LISTEN      4497/ssh
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      -                              
tcp6       0      0 ::1:33061               :::*                    LISTEN      4497/ssh     

$ cat /proc/4497/status

Name:   ssh
State:  S (sleeping)

SSH 进程处于休眠状态 state。

在一个单独的终端中,我访问了远程 MySQL 数据库:

$ mysql -u <db_user> -p -h 127.0.0.1 -P 33061

最后,我尝试使用以下 Ni-Fi 设置连接到本地 Linux 实例中的本地 mysql 数据库:

• 数据库驱动程序 Class 名称: com.mysql.jdbc.Driver

• 数据库驱动程序位置: /usr/share/java/mysql-connector-java-5.1.45.jar

• 数据库连接 URL: jbdc:mysql://127.0.0.1:3306/<local_db_name>

• 数据库用户: <local_db_user>

• 密码: <local_db_password>

我得到了同样的结果:

原因:org.apache.nifi.processor.exception.ProcessException:没有适合给定数据库连接的驱动程序URL

尽管如此,在单独的 Linux 终端中,我仍然可以访问本地 mysql 数据库:

$ mysql -u <local_db_user> -p -h 127.0.0.1 -P 3306

编辑于 2022 年 1 月 10 日 11:58 UTC

更正了 Ni-Fi controller 服务配置中的错字:

• 数据库连接 URL: jdbc:mysql://127.0.0.1:33061/<db_name>

Controller 服务问题解决!

谢谢!


编辑于 2022 年 1 月 12 日 08:26 UTC

我仍然遇到连接问题。 我设法启用了 controller 服务,但是当我运行处理器 QueryDatabaseTable 时,我收到以下错误:无法创建 PoolableConnectionFactory - 通信链路故障

QueryDatabaseTable[id=017e1003-c2d8-14cf-4e34-feee76411595] Unable to execute SQL select query SELECT * FROM periodic_measurements_test due to java.sql.SQLException: Cannot create PoolableConnectionFactory (Communications link failure

从服务器成功接收到的最后一个数据包是 0 毫秒前。 The last packet sent successfully to the server was 0 milliseconds ago.): javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate) ↳ causes: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException : 通信链路故障

从服务器成功接收到的最后一个数据包是 0 毫秒前。 最后一个成功发送到服务器的数据包是 0 毫秒前。 ↳ 原因:java.sql.SQLException: Cannot create PoolableConnectionFactory (Communications link failure

从服务器成功接收到的最后一个数据包是 0 毫秒前。 最后一个成功发送到服务器的数据包是 0 毫秒前。)↳ 原因:org.apache.nifi.processor.exception.ProcessException: java.ZAC5C74B64B4B8352EF2F181AF

从服务器成功接收到的最后一个数据包是 0 毫秒前。 最后一个成功发送到服务器的数据包是 0 毫秒前。)

处理器配置是默认配置,但以下情况除外:

• 数据库连接池服务:< DBCPConnectionPool controller 服务名称 >

• 数据库类型:MySQL

• 表名称:periodic_measurements_test

controller服务配置依旧:

• 数据库连接 URL: jdbc:mysql://127.0.0.1:33061/<db_name>

• 数据库驱动程序 Class 名称: com.mysql.jdbc.Driver

• 数据库驱动程序位置: /usr/share/java/mysql-connector-java-5.1.45.jar

• 数据库用户: <db_user>

• 密码: <db_password>

SSH 隧道似乎没问题:

netstat -nplt

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:33061         0.0.0.0:*               LISTEN      29483/ssh           
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      -                                      
tcp        0      0 127.0.0.1:8443          0.0.0.0:*               LISTEN      -     

在 Linux 终端中,我仍然可以通过 CLI 访问 MySQL 数据库:

$ mysql -u <db_user> -p -h 127.0.0.1 -P 33061

当我尝试从本地 Linux 实例中的 MySQL 数据库中获取数据时,我得到了相同的结果。

@Nic3500 和 @Sdairs,感谢您的评论!

我对 DBCPConnectionPool1.15.2 controller 服务配置做了如下改动:

• 数据库驱动程序 Class 名称:com.mysql.cj.Z84BEFFD3A0D49636A58CE6080CAA87C7

• 数据库驱动程序位置:/usr/share/java/mysql-connector-java-8.0.26.jar

其他参数不变:

• 数据库连接 URL:jbdc:mysql://127.0.0.1:33061/<db_name>

• 数据库用户:

• 密码:

文件 mysql-connector-java-8.0.26.jar 位于 /usr/share/java

还:

$ cat /usr/share/java/META-INF/services/java.sql.Driver
com.mysql.cj.jdbc.Driver

和:

$ netstat -nplt

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

tcp 0 0 127.0.0.1:33061 0.0.0.0:* LISTEN 4873/ssh
tcp6 0 0 ::1:33061 :::* LISTEN 4873/ssh

我仍然收到一个错误:

原因:org.apache.nifi.processor.exception.ProcessException:没有适合给定数据库连接的驱动程序URL

访问驱动程序 jar 文件的权限:

bernardo@BDi-laptop:/usr/share/java$ ls -l

-rwxrwxr-- 1 bernardo bernardo 2462344 gen  4 19:01 mysql-connector-java-8.0.26.jar

最后,我设法解决了这个问题。 它与 jdbc 驱动程序的版本有关。

我做了以下事情:

在 Linux 浏览器 go 到https://dev.Z81C3B080DAD537DE/57E10E098A6BZ 中。

Select

• Ubuntu Linux

• 18.04

下载

在 CLI 终端 go 到下载目录

$ cd /home/bernardo/Downloads

解压 deb 文件

$ sudo dpkg -i mysql-connector-java_8.0.26-1ubuntu18.04_all.deb

检查文件系统中的连接器位置

$ dpkg -L mysql-connector-java | fgrep jar

/usr/share/java/mysql-connector-java-8.0.26.jar

从之前的 jdbc 驱动程序中清除 /usr/share/java

$ sudo rm mysql-connector-java-5.1.45.jar
$ sudo rm -r com
$ sudo rm -r META-INF/

安装连接器:解压.jar文件

$ sudo jar xvf /usr/share/java/mysql-connector-java-8.0.26.jar

要查找驱动程序 class 名称,请打开 /usr/share/java/META-INF/services/java.sql.Driver

$ cat /usr/share/java/META-INF/services/java.sql.Driver
com.mysql.cj.jdbc.Driver

驱动class名称为:com.mysql.Z84BEFFD3A0D49636A58CE6080CAA87CZ7

重启Apache Ni-Fi

修改 controller 服务的配置:

• 数据库驱动程序 Class 名称: com.mysql.cj.jdbc.Driver

• 数据库驱动程序位置: /usr/share/java/mysql-connector-java-8.0.26.jar

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM