root01@damin:~$ mysql -u root -p -e "SHOW GLOBAL VARIABLES LIKE 'port';" Enter password: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) root01@damin:~$
时间: 2025-08-09 13:21:41 浏览: 6
<think>好的,我现在需要帮助用户解决在Ubuntu Server上使用root用户登录MySQL时出现的ERROR1045 (28000)访问被拒绝的问题。用户之前询问了如何查询MySQL占用的端口,现在转向了认证问题。我需要结合用户提供的引用内容,特别是引用[1]、[2]、[3]、[4]中的信息,来构建解决方案。首先,用户提到他们遇到了1045错误,这意味着密码错误或权限问题。引用[2]指出用户可能没有提供正确的root密码,而引用[3]提到安装后应使用mysqladmin更改密码。引用[4]中的用户尝试过修改密码但无效,可能需要其他方法。我需要考虑可能的解决方法,比如跳过权限检查进入MySQL,然后重置root密码。这通常涉及停止MySQL服务,以--skip-grant-tables模式启动,然后更新密码。同时,需要确保在重置后正确刷新权限,并重启服务。另外,用户可能使用的是MariaDB而不是MySQL,这可能导致不同的配置文件或命令路径。需要注意区分,比如服务名是mysql还是mariadb,配置文件的位置可能不同。
还要检查用户是否正确使用了密码,是否有空格或特殊字符导致的问题,是否在命令行中正确输入了密码。此外,可能需要检查MySQL的认证插件,因为从MySQL5.7开始,root用户可能使用auth_socket插件,导致密码登录失败,需要更改插件为mysql_native_password。
需要分步骤详细说明每个操作,包括停止服务、修改配置、启动服务、执行SQL语句、刷新权限等。同时,提醒用户在操作前备份数据,避免数据丢失。
最后,生成相关问题,帮助用户进一步排查可能的问题,比如如何修改认证插件,如何启用远程访问,如何检查MySQL服务状态等。</think>### Ubuntu Server解决MySQL ERROR 1045 (28000)的完整方案
---
#### **步骤1:验证密码输入正确性**
1. **检查密码输入格式**
在命令行执行时,密码参数需紧跟`-p`(无空格):
```bash
mysql -u root -pYourPassword # 正确格式
mysql -u root -p YourPassword # 错误格式(-p与密码之间有空格)
```
2. **测试空密码登录**
MySQL默认安装可能允许空密码登录:
```bash
mysql -u root # 不指定-p参数
```
---
#### **步骤2:跳过权限验证重置密码**
1. **停止MySQL服务**
```bash
sudo systemctl stop mysql
```
2. **以安全模式启动MySQL**
```bash
sudo mysqld_safe --skip-grant-tables &
```
3. **无密码登录MySQL**
新开终端执行:
```bash
mysql -u root
```
4. **执行密码重置命令**
```sql
FLUSH PRIVILEGES; -- 刷新权限
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword123!'; -- 修改密码
exit;
```
5. **重启MySQL服务**
```bash
sudo systemctl restart mysql
```
---
#### **步骤3:处理认证插件问题**
若使用MySQL 8.0+,可能需调整认证插件:
```sql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NewPassword123!';
FLUSH PRIVILEGES;
```
---
#### **步骤4:验证新密码**
```bash
mysql -u root -pNewPassword123! -e "SELECT 1;" # 测试连接
```
---
### **关键原理说明**
| 现象 | 原因 | 解决方案 |
|------|------|----------|
| 密码错误提示 | root密码不匹配或未初始化 | 通过`--skip-grant-tables`绕过验证[^3] |
| 套接字认证冲突 | 使用`auth_socket`插件 | 切换为`mysql_native_password`插件[^1] |
| 服务配置错误 | 配置文件权限问题 | 检查`/etc/mysql/my.cnf`权限 |
---
### **扩展问题**
1. 如何修改MySQL默认认证插件?
2. MySQL 8.0的密码策略有哪些限制?
3. 如何通过日志排查认证失败原因?
4. 如何为MySQL创建新用户并授权?
5. 忘记root密码时如何强制重置?
6. 如何配置MySQL允许远程root登录?
---
### **操作验证示例**
```bash
# 查看认证插件状态
mysql -u root -p -e "SELECT user,plugin FROM mysql.user;"
```
**输出示例**:
```
+------------------+-----------------------+
| user | plugin |
+------------------+-----------------------+
| root@localhost | mysql_native_password |
+------------------+-----------------------+
```
[^1]: MySQL权限系统工作原理
[^3]: Ubuntu系统服务管理指南
阅读全文
相关推荐

















