不知道MySQL密码怎么办?|不卸载重装的处理办法
在日常工作中,我们可能会遇到 MySQL 密码丢失的情况。这篇文章将会为大家详细讲解如何在 MySQL 密码丢失的情况下,通过跳过权限表来重置 MySQL 密码。
1. 停止 MySQL 服务
首先,我们需要停止 MySQL 服务,避免数据库正在运行时无法更改相关设置。可以通过以下命令停止 MySQL 服务:
sudo systemctl stop mysql
或者,如果你是使用的其他版本的 MySQL,可以使用:
sudo service mysql stop
2. 启动 MySQL 安全模式
接下来,我们启动 MySQL 的安全模式,跳过权限表,让我们可以直接登录 MySQL 进行修改。在安全模式下,MySQL 不会加载权限表,因此我们可以不需要密码直接进入 MySQL 命令行。
执行以下命令启动 MySQL 安全模式:
mysqld_safe --skip-grant-tables &
该命令会启动 MySQL 服务,并跳过授权表加载,允许我们在没有密码的情况下直接访问 MySQL。
注意:这个命令通常会在后台运行,因此你不需要等待它完成。
在某些系统(例如 Ubuntu 和其他基于 Debian 的发行版)中,mysqld_safe
可能并不存在或者路径不同。你可以尝试以下几种方法来解决这个问题:
-
检查 mysqld_safe 是否存在
运行以下命令查找它的位置:
sudo find / -name "mysqld_safe" 2>/dev/null
如果它存在但路径不同,可以直接使用完整路径来启动,例如:
sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables &
-
使用 mysqld 替代
如果没有 mysqld_safe
,可以直接使用 mysqld
命令来跳过权限表验证:
sudo mysqld --skip-grant-tables &
3. 登录 MySQL
启动安全模式后,打开一个新的终端窗口,通过以下命令登录到 MySQL:
mysql -u root
此时无需密码即可登录到 MySQL 的命令行界面。
4. 重置密码
成功登录 MySQL 后,执行以下 SQL 命令来重置 root 用户的密码:
USE mysql;
UPDATE mysql.user SET authentication_string=PASSWORD('your_new_password') WHERE User='root';
FLUSH PRIVILEGES;
EXIT;
如果你的 MySQL 版本不支持 authentication_string
字段,使用以下命令:
UPDATE mysql.user SET password=PASSWORD('your_new_password') WHERE User='root';
FLUSH PRIVILEGES;
EXIT;
在上述命令中,将 your_new_password
替换为你希望设置的新密码。
5. 停止 MySQL 安全模式
完成密码重置后,我们需要停止 MySQL 的安全模式。你可以通过查找 mysqld_safe
进程并停止它来完成。
使用以下命令查找 mysqld_safe
进程:
ps aux | grep mysqld_safe
找到 mysqld_safe
的进程 ID(PID),然后停止它:
sudo kill <PID>
6. 重启 MySQL 服务
停止安全模式进程后,重新启动 MySQL 服务以恢复正常操作:
sudo systemctl restart mysql
或者使用以下命令重启服务:
sudo service mysql restart
7. 使用新密码登录
现在,MySQL 已经恢复正常,您可以使用新密码登录了:
mysql -u root -p
系统会提示你输入新设置的密码,验证密码是否正确。
总结
以上就是解决 MySQL 密码丢失并重置密码的完整步骤。在没有密码的情况下,我们通过跳过权限表启动 MySQL,然后重置密码。重置后,确保恢复 MySQL 服务正常运行,并验证密码是否生效。