![](/img/trans.png)
[英]What are the steps to be able to connect to a mysql database on linux from windows
[英]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.