Debian11下MariaDB root本地无密码登录失败问题求助
问题分析
你的核心问题是root@localhost仅配置了mysql_native_password密码认证,而Debian 11默认的MariaDB会给本地root用户启用「密码认证+unix_socket套接字认证」的双模式,允许系统root用户通过本地套接字无密码登录。
从你提供的权限信息来看:
- 旧版的
IDENTIFIED BY PASSWORD语法是MySQL 5.7及更早的写法,MariaDB 10.5+(Debian11默认版本)推荐使用IDENTIFIED VIA的新语法 - 没有配置unix_socket认证,导致本地执行
mysql -u root或服务重载时,因尝试无密码登录被拒绝
解决方案
操作前请确保你能通过mysql -u root -p正常登录,且不要关闭当前登录会话(防止操作失误锁死自己)。
- 登录MariaDB
mysql -u root -p
- 更新root@localhost的认证规则
将下面语句中的密码哈希替换为你自己的(即mysql.user表中root@localhost对应的authentication_string值:*A1500BDAC90A8E0183B2803086BD6D6E0999EC60):
GRANT ALL PRIVILEGES ON *.* TO `root`@`localhost` IDENTIFIED VIA mysql_native_password USING '*A1500BDAC90A8E0183B2803086BD6D6E0999EC60' OR unix_socket WITH GRANT OPTION;
- 清理重复的PROXY权限
你当前有两条重复的PROXY授权,执行下面语句删除(执行一次即可,重复执行会报错,属正常情况):
DROP PROXY ON ''@'%' FOR 'root'@'localhost';
- 刷新权限使配置生效
FLUSH PRIVILEGES;
验证操作
- 退出当前MariaDB会话,用系统root用户执行
mysql(无需加任何参数),应直接登录成功 - 执行
/etc/init.d/mariadb reload,不再出现Access denied错误 - 网站的数据库访问不受影响,因为网站依然使用密码认证方式连接
注意事项
- 该配置是Debian 11 MariaDB的标准默认配置,unix_socket认证仅允许系统root用户或mysql组用户通过本地套接字无密码登录,安全性有保障
- 如果操作后出现登录问题,可以启动MariaDB安全模式重置:
然后重新登录修改配置即可systemctl stop mariadb mysqld_safe --skip-grant-tables &
内容的提问来源于stack exchange,提问作者afriend
相关产品推荐
相关产品推荐

