温馨提示×

Debian MySQL为何无法登录

小樊
51
2026-07-15 19:57:53
栏目: 云计算

Debian 上 MySQL(或 MariaDB)无法登录 常见原因很多,一般不是单一问题。下面按最常见 → 较少见的顺序帮你排查,并给出对应解决办法。


一、最常见原因:认证方式或密码问题

1️⃣ 使用 root 登录失败(最常见)

Debian 默认 MariaDB 使用 unix_socket 插件,而不是密码登录。

现象

mysql -u root -p
Enter password:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

原因

root 只能通过 系统 root 用户 登录,不能用密码。

解决方法(任选一种)

方法 1:用 sudo 登录(推荐)

sudo mysql

方法 2:改为密码登录

ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('新密码');
FLUSH PRIVILEGES;

然后就可以:

mysql -u root -p

二、MySQL 服务未启动

检查服务状态

systemctl status mariadb
# 或
systemctl status mysql

如果没启动

sudo systemctl start mariadb
sudo systemctl enable mariadb

三、端口 / 监听问题

MySQL 没监听 3306

ss -lntp | grep 3306

如果没有输出,检查配置:

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

确认:

bind-address = 127.0.0.1
# 或
bind-address = 0.0.0.0

然后重启:

sudo systemctl restart mariadb

四、用户不存在或 host 不匹配

登录后查看用户

SELECT user, host FROM mysql.user;

如果你是这样登录的:

mysql -u root -h 127.0.0.1

但用户只有:

root | localhost

就会失败。

✅ 解决:

CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY '密码';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' WITH GRANT OPTION;

五、忘记 root 密码(重置)

1️⃣ 停止服务

sudo systemctl stop mariadb

2️⃣ 跳过权限表启动

sudo mysqld_safe --skip-grant-tables &

3️⃣ 免密登录

mysql

4️⃣ 重置密码

FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';

5️⃣ 重启

sudo systemctl restart mariadb

六、AppArmor 或权限问题(较少见)

查看日志

sudo journalctl -u mariadb
# 或
sudo tail -n 50 /var/log/mysql/error.log

常见错误:

  • Can't read dir of /var/lib/mysql
  • Permission denied

✅ 解决:

sudo chown -R mysql:mysql /var/lib/mysql
sudo systemctl restart mariadb

七、MariaDB 和 MySQL 混用

Debian 默认是 MariaDB,不是 Oracle MySQL。

确认:

mysql --version

如果是:

mysql  Ver 15.xx Distrib 10.xx-MariaDB

✔ 正常,不用重装。


快速自检清单 ✅

你可以按顺序执行:

sudo systemctl status mariadb
sudo mysql
mysql -u root -p
SELECT user, host FROM mysql.user;

如果你愿意,可以直接把 具体报错信息登录命令 + 返回错误 发出来,我可以精确告诉你哪一步错了。

0