目录
- 1.问题所示
- 2. 基本知识
- 3. 解决方法
- 3.1 跳过验证Bug
- 3.2 设定初始密码
1.问题所示
发现密码验证错误,遗失密码
2. 基本知识
-
停止MySQL服务:
sudo systemctl stop mysql
-
以跳过权限表模式启动MySQL:
sudo mysqld_safe --skip-grant-tables &
-
登录MySQL:
mysql -u root
-
重置root用户密码:(不同版本不一,如果执行出错,可看下文)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
FLUSH PRIVILEGES;
- 重新启动MySQL服务:
sudo systemctl start mysql
3. 解决方法
根据上述的基本知识操作进行演示,过程中可能会出现个别Bug
3.1 跳过验证Bug
跳过验证的时候,如果出现如下提示:
root@iZ7xv98hm4hq0dd3xv23vuZ:~# sudo mysqld_safe --skip-grant-tables &
[1] 720919
root@iZ7xv98hm4hq0dd3xv23vuZ:~# 2024-09-02T14:05:11.207426Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2024-09-02T14:05:11.233525Z mysqld_safe A mysqld process already exists[1]+ Exit 1 sudo mysqld_safe --skip-grant-tables
截图如下:
先确保所有 MySQL 相关的进程都被停止:ps aux | grep mysqld
如果看到任何运行中的 MySQL 进程,使用 kill 或 kill -9 命令手动终止它们:sudo kill -9 <PID>
3.2 设定初始密码
使用的是 MySQL 5.7 或更高版本,密码字段通常是 authentication_string,但 PASSWORD() 函数可能已被弃用
UPDATE mysql.user SET authentication_string='123456' WHERE User='root' AND Host='localhost';
使用的是 MySQL 5.6 或更低版本,密码字段可能是 password,可以使用以下命令:
UPDATE mysql.user SET password=PASSWORD('123456') WHERE User='root' AND Host='localhost';
之后统一执行:`FLUSH PRIVILEGES;``