Linux连接MySQL出现1045错误 解决方法

本文介绍了解决Linux环境下MySQL 1045错误的方法,包括如何为用户分配远程访问权限及更新用户主机设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开始使用Linux连接mysql数据库的时候,出现了1045错误。当出现这个问题的时候,应该是用户被数据库拒绝访问了,我们应该为你的数据库开辟权限。

1.登录数据库输入linux指令

mysql -uroot -padmin

登录你的数据库输入用户名和密码

2.使用数据库,查询权限

mysql> use mysql; 
mysql> select host,user from user;

+--------+--------------+
| user   | host         |
+--------+--------------+
| myuser | %            |
| root   | %            |
| server | %            |
| root   | 127.0.0.1    |
| root   | 192.168.1.60 |
| ted    | 192.168.1.60 |
| xuys   | 192.168.1.60 |
| root   | ::1          |
|        | iz94w6ieqtwz |
| root   | iz94w6ieqtwz |
|        | localhost    |
| root   | localhost    |
+--------+--------------+

可以查询用户和权限

3.想要远程mysql服务器,需要增加普通权限的用户

mysql> grant select,update,insert,delete on mas.* to root@localhost identified by "admin";

这句命令的意思是:新建用户root,并且只允许该用户在本地(localhost)登录,密码是admin,并且赋予它对mas库中所有表select,update,insert的权限。我们在这有一个mas库,所以用mas.*代表mas库下的所有表。 现在该root用户,已经可以登录mysql了,但是也还是只能本地登录。

若要想root用户可以远程登录mysql,则还需要以下命令:

mysql> update user set host = '%' where user = 'root';

我们也可以直接给用户权限

grant all on *.* to 用户名@"%" identified by "密码";

flush privileges;刷新权限



<think>我们面对的是Navicat连接MySQL 8.0时出现的1045错误(拒绝访问)。根据引用内容,我们可以总结出几个可能的原因和解决方案: 可能原因: 1. 密码错误:输入的用户名或密码不正确。 2. MySQL服务未启动:需要确保MySQL服务正在运行。 3. 用户权限问题:root用户可能没有从localhost访问的权限,或者密码验证方式不兼容(MySQL 8.0默认使用caching_sha2_password,而旧版本客户端可能使用mysql_native_password)。 解决方案: 1. 确保MySQL服务已启动。 2. 尝试使用命令行登录MySQL,检查用户名和密码是否正确。 3. 如果密码正确,但Navicat仍然无法连接,可能是由于MySQL 8.0的默认身份验证插件与Navicat不兼容(特别是旧版本的Navicat)。可以尝试更改root用户的身份验证方式为mysql_native_password。 具体步骤: ### 步骤1:启动MySQL服务 - 在Windows中,打开“服务”(services.msc),找到MySQL服务,确保其状态为“正在运行”。 - 在Linux或macOS中,使用相应的命令(如`sudo systemctl start mysqld`)启动服务。 ### 步骤2:通过命令行登录MySQL 打开终端(或命令提示符),输入以下命令: ```bash mysql -u root -p ``` 然后输入密码。如果密码正确,将进入MySQL命令行。 ### 步骤3:检查用户权限和身份验证插件 登录MySQL后,执行以下SQL语句查看root用户的身份验证插件: ```sql SELECT user, host, plugin FROM mysql.user WHERE user='root'; ``` 如果`plugin`列为`caching_sha2_password`,而你的Navicat版本较旧(低于12),则可能不支持该插件。 ### 步骤4:更改身份验证插件(可选) 如果确认是插件问题,可以更改root用户的身份验证插件和密码(注意:以下命令将密码设置为'new_password',请替换为你的密码): ```sql ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password'; FLUSH PRIVILEGES; ``` 然后退出MySQL。 ### 步骤5:重新连接 在Navicat中使用新密码(如果更改了密码)和root用户尝试连接。 ### 步骤6:检查连接配置 确保Navicat中的连接配置正确,包括主机名(localhost)、端口(默认3306)、用户名和密码。 ### 其他可能情况 - 如果忘记root密码,需要重置密码。可以参考MySQL官方文档关于密码重置的步骤(通常需要跳过权限表启动MySQL,然后修改密码)。 - 确保没有防火墙阻止连接。 如果按照以上步骤仍然无法解决,可以尝试创建一个新的用户并授予权限,然后使用新用户连接。 例如,创建新用户: ```sql CREATE USER 'newuser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost'; FLUSH PRIVILEGES; ``` 然后使用这个新用户和密码在Navicat中连接。 注意:以上操作需要具有足够权限的用户(如root)在MySQL命令行中执行。 §§相关问题§§ 1. 如何重置MySQL的root密码? 2. 如何检查MySQL服务的运行状态? 3. Navicat支持MySQL 8.0的身份验证插件吗?</think>### Navicat 连接 MySQL 8.0 出现错误 1045解决方案 出现 `1045 - Access denied for user 'root'@'localhost'` 错误通常由以下原因导致,请按顺序排查: #### 1. **检查 MySQL 服务状态** - 确保 MySQL 服务正在运行: ```bash # Windows 服务管理 services.msc → 找到 MySQL 服务 → 启动 # Linux/macOS 终端 sudo systemctl status mysql sudo systemctl start mysql # 如果未运行 ``` #### 2. **验证密码正确性** - 通过命令行测试登录: ```bash mysql -u root -p # 输入密码尝试登录 ``` - 如果密码错误: - 重置 root 密码(见步骤 4) - 注意:MySQL 8.0 密码区分大小写 #### 3. **修改身份验证插件(关键步骤)** MySQL 8.0 默认使用 `caching_sha2_password` 插件,旧版 Navicat 可能不兼容: ```sql -- 登录 MySQL 命令行后执行 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的新密码'; FLUSH PRIVILEGES; ``` > 此操作将验证方式改为传统模式(`mysql_native_password`)[^1][^4] #### 4. **重置 root 密码(若忘记密码)** ```bash # 停止 MySQL 服务 sudo systemctl stop mysql # 跳过权限启动 mysqld_safe --skip-grant-tables & # 登录并重置密码 mysql -u root ``` ```sql -- MySQL 命令行内执行 FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码'; EXIT; ``` ```bash # 重启 MySQL sudo systemctl restart mysql ``` #### 5. **检查用户权限** ```sql -- 确认 root 用户权限 SELECT host, user, authentication_string FROM mysql.user; -- 如果缺少本地访问权限 CREATE USER 'root'@'localhost' IDENTIFIED BY '密码'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost'; ``` #### 6. **Navicat 连接配置** - 主机名/IP: `localhost` 或 `127.0.0.1` - 端口: 默认 `3306`(检查 `my.cnf` 确认) - 验证方式: 选择 **Legacy Authentication**(旧版验证) #### 7. **防火墙与端口检查** ```bash # Linux 检查端口开放 sudo ufw allow 3306/tcp # Windows 检查防火墙规则 ``` > 确保 3306 端口未被阻止[^2] #### 8. **升级 Navicat(终极方案)** - 下载最新版 Navicat(v15+),已原生支持 MySQL 8.0 验证插件[^3] --- ### 常见错误排查表 | 现象 | 解决方案 | |------|----------| | 密码正确仍报错 | 执行步骤 3 修改验证插件 | | 忘记 root 密码 | 执行步骤 4 密码重置 | | 连接超时 | 检查防火墙(步骤 7)和服务状态(步骤 1) | | 仅命令行可登录 | 检查 Navicat 的验证方式设置(步骤 6) | > **注意**:生产环境操作前请备份数据,密码修改后需重启 Navicat 连接[^4]。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值