【问题标题】:Not able to execute Query in MariaDB using MySQL as Driver无法使用 MySQL 作为驱动程序在 MariaDB 中执行查询
【发布时间】:2013-09-06 07:04:28
【问题描述】:

我正在测试一个连接到数据库并获取 my_test 表详细信息的简单程序。

我遇到了java.sql.SQLException: Unable to load authentication plugin. 的异常

堆栈跟踪

java.sql.SQLException: Unable to load authentication plugin ''.
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:923)
        at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1715)
        at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1244)
        at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2412)
        at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2445)
        at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2230)
        at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:813)
        at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
        at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:399)
        at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:334)
        at java.sql.DriverManager.getConnection(DriverManager.java:579)
        at java.sql.DriverManager.getConnection(DriverManager.java:221)
        at TestRoot.main(TestRoot.java:19)

我正在使用驱动程序作为 MySQL。 我的数据库是 mariadb-5.5.30。

      Connection con=null;
      Statement st=null;
      ResultSet rs=null;
      String firstName="";
      try
      {
              Class.forName("com.mysql.jdbc.Driver");

              con=DriverManager.getConnection("jdbc:mysql://localhost:3306/my_test","root","");
              st=con.createStatement() ;
              rs=st.executeQuery("SELECT * FROM test") ;
              while(rs.next())
              {
                      firstName=rs.getString(2);
                      System.out.println(firstName);
              }

      }
      catch(Exception err)
      {
              System.out.println(err.toString());
      }

我知道连接,结果集没有关闭,但我认为这不是问题的原因。

【问题讨论】:

  • 你需要更改驱动程序,(mysql 5.1.6 到 5.1.18)为我工作,或更改哈希传递 mysql 帐户,如 Michael Laffargue 所说。

标签: java mysql mariadb


【解决方案1】:

您可能想看看这里:https://mariadb.atlassian.net/browse/MDEV-3935

当 mysql.user 表上设置的密码使用 较旧的格式 - 形式为 7f84554057dd964b (我相信是 'badpwd') 而不是类似的东西 *AAB3E285149C0135D51A520E1940DD3263DC008C 是较新的形式。

重置用户记录的密码,如 MDEV-545 中所述 确实解决了这个问题,因为它升级了表中的密码格式。


来自 MariaDB 文档:https://mariadb.com/kb/en/pam-authentication-plugin/

注意:Windows 不使用 PAM,因此 PAM 身份验证插件在 Windows 上不起作用。但是,可以使用 Windows 客户端连接到 MariaDB 服务器——例如在 Linux 或 Solaris 上——它确实使用了 PAM 身份验证插件。请参阅此示例。

据我了解,您应该在 linux 上安装它(阅读上一个链接中的文档)

【讨论】:

  • 我安装了 2 个 MaraDB,一个在我的本地并在 Windows 上运行,一个在 Linux 上。我将我的 windows mariaDB 密码更改为一个在 Linux 机器上给我错误的密码,它工作正常。此外,只有在连接有问题时才会出现问题。
  • 可能与版本有关,您可以尝试使用旧版本的 MariaDB 吗?
  • 我在本地(Windows)和测试(Linux)机器上都安装了相同版本的 MariaDB。它可以在 Windows 上运行,但问题出在 Linux 上,我仍然应该尝试在 Linux 上使用另一个版本的 MariaDB 吗?
【解决方案2】:

我遇到了同样的问题,并设法通过更改 jdbc 驱动程序来解决它。我用的是 MariaDB jdbc 驱动:

(来自 Spring 配置文件)

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-23
    • 2021-04-03
    • 2016-03-11
    • 2017-03-20
    • 1970-01-01
    • 2020-11-15
    • 2021-12-03
    • 2013-03-11
    相关资源
    最近更新 更多