mysql localhost无法登陆_MySQL 'root'@'localhost'无法登录

今天早上同事说MySQL root账号登录不上了。我试了一下

#mysql -u root -p

提示”Access denied for user ‘root’@’localhost’ (using password: YES)”

因为年后有同事离职,我第一反应是谁修改了root密码?按照忘记root密码来重置一下密码:

#/etc/init.d/mysql stop

#mysqld_safe –skip-grant-tables &

#mysql -uroot -p

mysql>update mysql.user set password=password(‘mypassword’) where user=’root’;

mysql>flush privileges;

mysql>quit

用新密码还是无法登录,提示跟上面一样。换一个非root账号登录,查看一下user表:

mysql> select user,host from user;

+———–+———+

| user   | host |

+———–+———+

| root  | 127.0.0.1 |

| night | % |

+———–+———+

怀疑默认的localhost没有映射到127.0.0.1?试试#mysql -u root -p xxxx -h 127.0.0.1,果然可以登录。

之前配置数据库的同学没有给’root’@’localhost’和’root’@’ip’授权。

grant all privileges on . to ‘root’@’localhost’ identified by ‘mypassword’ with grant option;

grant all privileges on . to ‘root’@’118.192.91.xxx’ identified by ‘mypassword’ with grant option;

再查询一下用户表:

这里写图片描述

7a46f829f3bbcf7c424260601792f3f9.png

然后#mysql -u root -p xxxx,登录成功!

查了一下mysql -h localhost和mysql -h 127.0.0.1的区别,通过localhost连接到mysql是使用UNIX socket,而通过127.0.0.1连接到mysql是使用TCP/IP。看看状态:

mysql -h localhost > status

Connection id:     639

Current database: mysql

Current user:   root@localhost

SSL:           Not in use

Current pager: stdout

Using outfile:        ”

Using delimiter:    ;

Server version:     5.6.15-log Source distribution

Protocol version: 10

Connection:    Localhost via UNIX socket

mysql -h 127.0.0.1 > status

Connection id:     640

Current database: mysql

Current user:   root@localhost

SSL:           Not in use

Current pager: stdout

Using outfile:        ”

Using delimiter:    ;

Server version:     5.6.15-log Source distribution

Protocol version: 10

Connection:   127.0.0.1 via TCP/IP

当您在尝试登录MySQL数据库时遇到“ERROR 1045 (28000) Access denied for user 'root'@'localhost'”错误信息,这通常表示您的MySQL服务器正在拒绝使用当前提供的用户名和密码组合登录。以下是可能导致此错误的一些常见原因及相应的解决步骤: ### 常见原因: 1. **用户名不存在**:您输入的用户名可能并不存在于MySQL的用户列表中。 2. **密码不匹配**:提供的密码与数据库中保存的密码不一致。 3. **权限设置问题**:即使用户名存在,如果其权限不足以允许登录到特定的数据库、模式或其他受限资源,则也可能导致访问被拒绝。 4. **防火墙限制**:系统或网络级别的安全配置可能会阻止某些来源的连接。 5. **MySQL服务未运行**:MySQL服务器可能已经停止运行。 6. **配置文件错误**:如`my.cnf`或`mysqld.ini`等配置文件中的设置可能阻止了正确的连接。 ### 解决步骤: #### 检查密码和用户名是否正确 1. 确认您输入的用户名和密码是否准确无误。注意区分大小写,并检查是否存在拼写错误。 - **提示**:建议使用文本编辑器直接查看数据库管理工具中存储的密码(例如,在MariaDB中,可以使用`SHOW VARIABLES LIKE 'secure_file_priv';`命令检查),确认密码是否正确。 #### 检查权限设置 1. 使用`SHOW GRANTS FOR <username>`命令查询用户的权限详细情况,确认是否具备登录所需的权限。 - **提示**:如果结果显示用户具有足够的权限,但仍无法登录,可能是其他配置错误所致。 #### 验证MySQL服务状态 1. 检查MySQL服务是否正常运行。您可以使用系统管理工具(如Windows的服务管理器或Linux的`service mysql status`)来验证服务状态。 - **提示**:确保服务已启动并且没有报错信息。 #### 修改密码或创建新用户 1. 如果发现密码错误或忘记密码,可以通过`mysqladmin`命令重置密码: ```bash sudo mysqladmin -u root password new_password ``` 或者通过MySQL客户端执行SQL命令: ```sql UPDATE mysql.user SET Password=PASSWORD('new_password') WHERE User='root'; FLUSH PRIVILEGES; ``` 2. 创建新的数据库用户并授予相应权限(推荐做法): ```sql CREATE USER 'new_username'@'localhost' IDENTIFIED BY 'password'; GRANT ALL ON database_name.* TO 'new_username'@'localhost'; FLUSH PRIVILEGES; ``` #### 更新防火墙规则 1. 检查并更新系统的防火墙规则,确保它允许从本地主机(或您的预期源)连接MySQL服务。 - **提示**:在Linux环境中,可以使用`ufw`或`iptables`命令调整防火墙设置;在Windows环境下,可能需要修改Windows Defender的设置。 #### 检查MySQL配置 1. 查看`my.cnf`或`mysqld.ini`配置文件中与安全性相关的设置,如`skip-grant-tables`选项是否被激活。 - **提示**:如果在调试过程中发现`skip-grant-tables`启用,可能会影响数据库的安全性和完整性。 ### 相关问题: 1. 当在远程服务器上尝试登录时,如何处理防火墙设置? 2. 在生产环境部署时,应如何妥善管理MySQL的用户权限? 3. 当忘记MySQL管理员密码时,是否有更安全的方式来恢复密码而不影响数据安全?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值