温馨提示×

linux mariadb为何报错1045

小樊
51
2026-10-24 20:35:20
栏目: 云计算

在 Linux 下使用 MariaDB 时出现 错误 1045(Access denied),通常表示:

用户无权访问数据库(用户名、密码、主机不匹配或被拒绝)

下面按最常见原因 → 对应解决办法说明。


一、1045 错误的典型提示

ERROR 1045 (28000): Access denied for user 'user'@'host' (using password: YES)

或

(using password: NO)

二、常见原因及解决方法

1️⃣ 用户名或密码错误(最常见)

mysql -u root -p

输错密码就会 1045。

✅ 解决:

  • 确认用户名、密码
  • 本地 root 默认可能 无密码(老版本)

2️⃣ 用户不存在或 host 不匹配

MariaDB 中用户是:

'user'@'localhost'
'user'@'127.0.0.1'
'user'@'%'

三者不是同一个用户

例如:

mysql -u app -h 127.0.0.1

但用户只有:

'app'@'localhost'

→ 1045

✅ 解决:

CREATE USER 'app'@'%' IDENTIFIED BY 'password';
GRANT ALL ON db.* TO 'app'@'%';
FLUSH PRIVILEGES;

3️⃣ root 用户只允许 socket 登录(Linux 特有)

很多 MariaDB 默认:

'root'@'localhost' 使用 unix_socket

你用:

mysql -u root -p

→ 1045

✅ 解决方式一(推荐):

sudo mysql

✅ 解决方式二(改密码登录):

ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpass';
FLUSH PRIVILEGES;

4️⃣ 防火墙 / 远程连接限制

远程连接 MariaDB:

mysql -h 192.168.1.10 -u user

→ 1045

原因可能是:

  • 用户未授权远程
  • bind-address 限制

✅ 检查:

# /etc/my.cnf.d/server.cnf
bind-address = 127.0.0.1

改为:

bind-address = 0.0.0.0

并确认用户:

'user'@'%'

5️⃣ 权限未刷新

改了用户或密码后没执行:

FLUSH PRIVILEGES;

6️⃣ SELinux 干扰(CentOS / RHEL)

getenforce

如果是 Enforcing,可能阻止连接。

✅ 临时测试:

setenforce 0

三、快速排查清单 ✅

# 1. 本地能否进
sudo mysql

# 2. 查看用户
SELECT user, host FROM mysql.user;

# 3. 测试连接
mysql -u user -p -h host

四、如果你愿意

你可以把完整报错信息和以下信息发我:

  • Linux 发行版(CentOS / Ubuntu)
  • MariaDB 版本
  • 你执行的命令

我可以直接帮你定位是哪一条原因。

0 踩