java - 无法连接到 Raspberry Pi 上托管的 MariaDB

标签 java php networking raspberry-pi mariadb

我正在用java编写一个小项目,其中我想将插入的密码与存储的sql输入进行比较。

一切都托管在我的 Raspberry Pi 3 上:

  • Apache 2.4.37
  • PHP 7.4.5
  • MariaDB 10.0
  • phpMyAdmin 5.0.2

我正在使用的电脑和树莓派位于同一网络中。 我可以使用 phpMyAdmin 轻松访问数据库,但不能在我的 Java 代码中访问数据库。 (raspberrypi/phpmyadmin), (localhost:3306 返回: localhost 拒绝连接)

以下是我所做的一些步骤:

  • 打开端口
  • 在 mariadb 设置中将绑定(bind)地址从 127.0.0.1 更改为 0.0.0.0
  • (skip-networking 甚至不在我的配置中)并将端口设置为 3306
  • 在 java 代码中将 mariadb-java-client-2.6 添加到我的库

主要的异常(exception)是:

java.sql.SQLNonTransientConnectionException: Could not connect to address=(host=localhost)(port=3306)(type=master) : Socket fail to connect to host:localhost, port:3306. Connection refused: connect

其他一切:

at org.mariadb.jdbc.internal.util.exceptions.ExceptionFactory.createException(ExceptionFactory.java:73)
    at org.mariadb.jdbc.internal.util.exceptions.ExceptionFactory.create(ExceptionFactory.java:192)
    at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.connectWithoutProxy(AbstractConnectProtocol.java:1346)
    at org.mariadb.jdbc.internal.util.Utils.retrieveProxy(Utils.java:634)
    at org.mariadb.jdbc.MariaDbConnection.newConnection(MariaDbConnection.java:150)
    at org.mariadb.jdbc.Driver.connect(Driver.java:89)
    at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677)
    at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228)
    at sample.SQL.<init>(SQL.java:16)
    at sample.Login.initialize(Login.java:55)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2573)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2466)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3253)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3210)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3179)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3152)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3129)
    at javafx.fxml/javafx.fxml.FXMLLoader.load(FXMLLoader.java:3122)
    at sample.Main.start(Main.java:16)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:919)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$11(PlatformImpl.java:449)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$9(PlatformImpl.java:418)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:417)
    at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:175)
    at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.sql.SQLNonTransientConnectionException: Socket fail to connect to host:localhost, port:3306. Connection refused: connect
    at org.mariadb.jdbc.internal.util.exceptions.ExceptionFactory.createException(ExceptionFactory.java:73)
    at org.mariadb.jdbc.internal.util.exceptions.ExceptionFactory.create(ExceptionFactory.java:183)
    at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.createSocket(AbstractConnectProtocol.java:255)
    at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.createConnection(AbstractConnectProtocol.java:512)
    at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.connectWithoutProxy(AbstractConnectProtocol.java:1341)
    ... 25 more
Caused by: java.net.ConnectException: Connection refused: connect
    at java.base/java.net.PlainSocketImpl.waitForConnect(Native Method)
    at java.base/java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:107)
    at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399)
    at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242)
    at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224)
    at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403)
    at java.base/java.net.Socket.connect(Socket.java:609)
    at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.createSocket(AbstractConnectProtocol.java:250)
    ... 27 more

被拒绝的连接听起来像是端口或权限问题,但我实际上已经尝试了有关此主题的最后一个问题中的所有内容。

预先感谢您的阅读和任何帮助:)

最佳答案

你可以从 shell 尝试

telnet <pi_IP> 3306

这将显示端口是否完全打开。这将显示您的 mariaDB 服务器设置是否至少打开了端口并且服务器正在运行。可能仍然有防火墙(例如 iptables 或 firewalld)正在运行并阻止到达端口

关于java - 无法连接到 Raspberry Pi 上托管的 MariaDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61488867/

相关文章:

java - Spring创建Bean报错,pom中声明依赖,spring找不到类

javascript - 如何使用php或jquery过滤json?

C++ boost,等待来自不同线程的var init

java - Selenium - 使用 xpath 或 cssSelector 查找元素

java - Netty编码器未执行

java - 为什么现在要从我的类中创建对象

php - 尝试 SQL 查询,并在成功时返回文本

php - PDO查询不转到表SQL

ruby-on-rails - 数据密集型应用程序的 RESTful Web 服务与 Socket 编程

Java: 无法使用 JDBC 访问远程 MySQL 数据库