MySQL密码正确却登录失败

Ubuntu 21.04 MySQL root权限恢复与密码修改

系统版本

$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 21.04
Release:	21.04
Codename:	hirsute

Centos pass掉,好像和Ubuntu的处理不太一样

错误提示:

# mysql -uroot -p
Enter password: 
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

错误来源

情况1:一个是密码错误,一般这种情况居多;
情况2:root账户的本地登录被限制,我这次遇到的就是这种情况

解决方法

首先停止mysql服务
sudo service mysql stop
无密码模式登录

其中 --skip-grant-tables 的意思是跳过授权表,通过此参数来跳过输入密码,后面跟得 & 符号是表示设置此进程为后台进程

# sudo mysqld_safe --user=root --skip-grant-tables &
sudo mysqld_safe --user=root --skip-grant-tables
2021-11-27T08:30:15.329550Z mysqld_safe Logging to '/var/lib/mysql/zhengzx.err'.
2021-11-27T08:30:15.332655Z mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.

‘/var/run/mysqld’ for UNIX socket file don’t exists.

# 没有下面这些文件就创建它,有则忽略
mkdir -p /var/run/mysqld
chown mysql:mysql /var/run/mysqld
$ sudo mysqld_safe --skip-grant-tables --skip-networking
2021-11-27T09:02:03.349206Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2021-11-27T09:02:03.385756Z mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

登录

mysql -uroot -p

敲回车就okay了,然后修改

情况1-忘记密码,修改root密码
-- 修改root密码
use mysql;
alter user root@'localhost' identified by '123456';
flush privileges; #刷新系统授权表

修改成功,退出–skip-networking模式,重启mysql即可

情况2-root账户的本地登录被限制
show databases;
use mysql;
mysql> select host,user from user;
+---------------+------------------+
| host          | user             |
+---------------+------------------+
| 192.168.0.105 | root             |
| localhost     | debian-sys-maint |
| localhost     | mysql.infoschema |
| localhost     | mysql.session    |
| localhost     | mysql.sys        |
+---------------+------------------+
5 rows in set (0.00 sec)
mysql> update user set host='localhost' where user = 'root';
mysql> FLUSH PRIVILEGES;

然后退出,关掉之前的–skip-grant-tables模式,然后重新启动mysql,就okay了;

### MySQL无法启动的原因及解决方案 MySQL服务突然无法启动可能由多种原因引起,以下是一些常见原因及其对应的解决方法: #### 1. 配置文件错误 配置文件(如`my.ini`或`my.cnf`)中可能存在语法错误或路径设置不正确。例如,引用中提到的`[WinMySQLAdmin] Server=D:\MySQL\bin\mysqld.exe`会导致`Unknown suffix`错误[^4]。 **解决方法**:检查并修正配置文件中的错误路径或语法问题,确保所有参数符合MySQL的要求。 #### 2. 端口冲突 MySQL默认使用3306端口,如果该端口被其他应用程序占用,MySQL将无法启动。 **解决方法**:通过命令行检查端口占用情况,并修改MySQL配置文件以使用其他端口[^2]。 ```bash netstat -ano | findstr :3306 ``` #### 3. 数据目录损坏 数据目录(通常为`/var/lib/mysql`)可能由于意外关闭或其他原因导致损坏,从而阻止MySQL启动[^1]。 **解决方法**: - 检查数据目录是否有损坏的文件。 - 使用`mysqlcheck`工具修复表。 - 如果问题仍未解决,可以尝试重新初始化数据目录: ```bash mysqld --initialize --user=mysql --basedir=/usr --datadir=/var/lib/mysql ``` #### 4. 权限问题 MySQL服务可能因权限不足而无法访问其数据目录或日志文件[^3]。 **解决方法**:确保MySQL服务运行用户对相关目录具有读写权限。可以通过以下命令调整权限: ```bash sudo chown -R mysql:mysql /var/lib/mysql ``` #### 5. 兼容性问题 某些版本的MySQL可能与操作系统存在兼容性问题[^3]。 **解决方法**: - 升级或降级MySQL版本以匹配操作系统要求。 - 在Mac系统中,可以尝试通过终端手动启动MySQL服务: ```bash sudo /usr/local/mysql/support-files/mysql.server start ``` #### 6. 初始化密码问题 在初始化MySQL时,如果没有正确设置密码或忘记生成的临时密码,可能导致后续登录失败[^5]。 **解决方法**: - 使用`--initialize-insecure`选项初始化数据库,避免生成复杂密码。 - 登录后立即更改密码以增强安全性: ```sql ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码'; ``` #### 7. 日志分析 如果上述方法均无效,可以通过查看错误日志定位问题。日志文件通常位于`/var/log/mysql/error.log`。 **解决方法**: - 打开日志文件并查找具体错误信息。 - 根据错误提示采取相应措施。 --- ### 示例代码 以下是一个简单的脚本,用于检查和启动MySQL服务: ```bash #!/bin/bash # 检查MySQL服务状态 systemctl status mysql.service # 如果未启动,则尝试启动 if [ $? -ne 0 ]; then sudo systemctl start mysql.service fi # 查看端口占用情况 netstat -ano | grep 3306 ``` ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值