在 Ubuntu 上 MariaDB 无法登录 是很常见的问题,原因有很多种。下面按最常见原因 → 排查方法 → 解决办法来系统说明。
MariaDB 默认优先使用 Unix socket 登录。
mysql -u root
✅ 可以
mysql -u root -h 127.0.0.1 -p
❌ 可能失败(密码/权限不对)
unix_socket 认证(Ubuntu 默认)Ubuntu 安装 MariaDB 后,root 默认 不能用密码登录。
查看:
SELECT user, host, plugin FROM mysql.user;
如果看到:
root | localhost | unix_socket
说明 root 只能本地 socket 登录。
✅ 解决方式:
sudo mysql
或切换为密码登录:
ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password;
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('你的密码');
FLUSH PRIVILEGES;
错误提示:
ERROR 1045 (28000): Access denied for user 'root'@'localhost'
✅ 重置密码(安全模式):
sudo systemctl stop mariadb
sudo mysqld_safe --skip-grant-tables &
然后:
mysql
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword';
EXIT;
sudo systemctl restart mariadb
systemctl status mariadb
如果没运行:
sudo systemctl start mariadb
配置文件:
/etc/mysql/mariadb.conf.d/50-server.cnf
bind-address = 127.0.0.1
远程登录失败通常是这个原因。
登录失败但用户存在,可能是 host 不对。
CREATE USER 'user'@'%' IDENTIFIED BY 'pass';
GRANT ALL PRIVILEGES ON *.* TO 'user'@'%';
FLUSH PRIVILEGES;
sudo systemctl status mariadb
sudo mysql -u root
mysql -u root -p
SELECT user, host, plugin FROM mysql.user;
你可以贴出:
我可以直接告诉你 是哪一条原因 + 具体命令。