如何使用mysql-connector-j连接MariaDB 10.11及更高版本?
解决MariaDB 10.11与Java连接的认证插件问题
核心原因
MariaDB 10.11默认认证机制与旧版本存在差异,而mysql-connector-java(现mysql-connector-j)不同版本对新认证插件的适配性不足:
- 5.1.34版本过旧,不支持MariaDB 10.11引入的
auth_gssapi_client相关认证逻辑,直接触发插件加载失败报错。 - 升级至8.3.0后,该版本连接器对MariaDB特定认证插件的兼容性仍有缺陷,导致
BadAuthenticationPlugin错误。
可行解决方案
方案1:使用官方适配的mariadb-connector-j(推荐)
MariaDB官方提供的连接器对自家数据库版本支持最完善,操作步骤如下:
- 在Maven依赖中替换原mysql-connector-java为mariadb-connector-j:
<dependency> <groupId>org.mariadb.jdbc</groupId> <artifactId>mariadb-java-client</artifactId> <version>3.3.3</version> <!-- 建议使用最新稳定版 --> </dependency>
- 调整连接URL以适配MariaDB 10.11:
String url = "jdbc:mariadb://localhost:3306/your_db_name?useSSL=false&serverTimezone=UTC";
(若需SSL连接,可将useSSL=false改为useSSL=true,并按需配置SSL相关参数)
方案2:继续使用mysql-connector-j并调整配置
若坚持使用mysql-connector-j(8.x版本),可通过强制指定认证插件规避兼容性问题:
- 保留mysql-connector-j 8.3.0依赖,修改连接URL,添加
authenticationPlugin=mysql_native_password参数:
String url = "jdbc:mysql://localhost:3306/your_db_name?useSSL=false&serverTimezone=UTC&authenticationPlugin=mysql_native_password";
- 确保数据库用户使用
mysql_native_password认证方式,可通过以下SQL修改:
ALTER USER 'your_user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password'; FLUSH PRIVILEGES;
注意事项
- 优先选择mariadb-connector-j,后续版本更新和问题修复会更及时适配MariaDB的新特性。
- 若使用mysql-connector-j,需留意版本与MariaDB版本的兼容性,避免再次出现认证类问题。
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

