MacOS下Spring Boot连接MariaDB报Access denied问题求助
你遇到的核心错误:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'liquibase' defined in class path resource
...
Caused by: liquibase.exception.DatabaseException: java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
结合Windows正常、MacOS异常,且无法修改properties文件的情况,试试以下针对性解决方法:
检查MariaDB root用户的认证插件
MacOS下MariaDB默认可能采用unix_socket认证插件(依赖系统用户权限登录,无需密码),而你的应用通过TCP/IP(127.0.0.1)连接时,这种认证方式会导致密码验证失败。- 用sudo直接登录MariaDB:
sudo mysql -u root - 查询当前root用户的认证插件:
SELECT user, host, plugin FROM mysql.user WHERE user='root'; - 如果
plugin字段是unix_socket,修改为密码认证:-- 替换为dbkey.txt中的密码,若为空密码则写'' ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的dbkey密码'; FLUSH PRIVILEGES;
- 用sudo直接登录MariaDB:
验证dbkey.txt的路径与权限
MacOS对文件路径大小写敏感,且权限管控更严格:- 确认
../../config/local/dbkey.txt的相对路径是相对于应用启动的工作目录(可在启动脚本中加入pwd命令打印当前目录) - 调整文件权限,确保应用进程能读取:
chmod 644 /完整路径/dbkey.txt - 打开dbkey.txt确认内容,避免存在多余换行符或空格(MacOS与Windows换行符不同,可能导致读取的密码带无效字符)
- 确认
检查MariaDB的TCP连接配置
确认MariaDB允许TCP连接:- 找到MacOS上的MariaDB配置文件(通常在
/usr/local/etc/my.cnf或/etc/my.cnf) - 确保
bind-address设置为127.0.0.1或0.0.0.0(允许本地TCP连接) - 确认
skip-networking被注释掉(开启该选项会禁用TCP连接,仅支持本地socket)
- 找到MacOS上的MariaDB配置文件(通常在
直接测试数据库连接
用mysql客户端模拟应用的连接方式,排查是否为数据库端问题:mysql -u root -p -h 127.0.0.1 -P 3306 local02输入dbkey.txt中的密码,若连接失败,说明是数据库配置问题;若成功,再排查应用读取密码的逻辑是否异常。
替换JDBC驱动(可选)
你当前使用的com.mysql.jdbc.Driver是旧版MySQL驱动,MariaDB官方推荐使用org.mariadb.jdbc.Driver,MacOS可能存在兼容性问题。如果可以修改依赖(如pom.xml/build.gradle),替换为MariaDB官方驱动:<!-- Maven示例 --> <dependency> <groupId>org.mariadb.jdbc</groupId> <artifactId>mariadb-java-client</artifactId> <version>最新稳定版本</version> </dependency>
内容的提问来源于stack exchange,提问作者WebStormer

