MySQL 忘记密码的几种重置方法
一、通用方法(MySQL 5.7及以上版本)
方法1:使用 --init-file 参数(推荐)
# 1. 停止 MySQL 服务
sudo systemctl stop mysql
# 或
sudoservice mysql stop
# 2. 创建密码重置文件
sudovim /tmp/mysql-init.sql
在文件中添加(MySQL 5.7+):
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
FLUSH PRIVILEGES;
对于 MySQL 5.6 及以下:
SET PASSWORD FOR 'root'@'localhost'= PASSWORD('你的新密码');
FLUSH PRIVILEGES;
# 3. 使用初始化文件启动 MySQL(跳过权限验证)
sudo mysqld_safe --init-file=/tmp/mysql-init.sql --skip-grant-tables &
# 4. 等待几秒后,登录并测试
mysql -u root -p # 输入新密码
# 5. 重启 MySQL 服务
sudo systemctl restart mysql
# 或
sudoservice mysql restart
# 6. 删除临时文件
sudorm /tmp/mysql-init.sql
方法2:使用 --skip-grant-tables 模式
# 1. 停止 MySQL 服务
sudo systemctl stop mysql
# 2. 以跳过权限表方式启动 MySQL
sudo mysqld_safe --skip-grant-tables &
# 3. 无密码登录 MySQL
mysql -u root
# 4. 在 MySQL 中执行密码重置
mysql> FLUSH PRIVILEGES;
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
# 或 MySQL 5.6及以下:
# mysql> UPDATE mysql.user SET authentication_string=PASSWORD('新密码') WHERE User='root';
# mysql> FLUSH PRIVILEGES;
# 5. 退出并重启 MySQL
mysql> exit
sudokillall mysqld
sudo systemctl start mysql
二、Windows 系统重置方法
方法1:使用 CMD
# 1. 停止 MySQL 服务
net stop MySQL
# 或使用服务名:net stop MySQL80
# 2. 创建初始化文件 C:\mysql-init.txt
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
# 3. 以跳过权限方式启动
cd"C:\Program Files\MySQL\MySQL Server 8.0\bin"
mysqld --init-file=C:\mysql-init.txt --console--skip-grant-tables
# 4. 新开 CMD 窗口登录测试
mysql -u root -p
# 5. 重启服务
net start MySQL
方法2:使用 MySQL Installer
1.运行 MySQL Installer
2.选择 "Reconfigure" 现有安装
3.在配置过程中可以重置 root 密码
三、macOS 重置方法
# 1. 停止 MySQL 服务
sudo /usr/local/mysql/support-files/mysql.server stop
# 2. 进入安全模式
sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
# 3. 新终端窗口登录
/usr/local/mysql/bin/mysql -u root
# 4. 执行密码重置
mysql> FLUSH PRIVILEGES;
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
mysql> exit
# 5. 重启服务
sudo /usr/local/mysql/support-files/mysql.server start
四、Docker 容器重置方法
# 进入容器
docker exec -it mysql-container bash
# 在容器内执行
mysqld_safe --skip-grant-tables &
mysql -u root
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
mysql> FLUSH PRIVILEGES;
五、特殊情况处理
如果出现认证插件错误
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
重置其他用户密码
ALTER USER '用户名'@'主机名' IDENTIFIED BY '新密码';
-- 示例
ALTER USER 'admin'@'%' IDENTIFIED BY '新密码';
六、预防措施
1.创建密码文件
echo '[client] user=root password=your_password' > ~/.my.cnf chmod 600 ~/.my.cnf
2.设置 root 邮箱或备用管理员账号
3.定期备份用户表
-- 备份用户权限
mysqldump mysql user db tables_priv columns_priv procs_priv > user_backup.sql
注意事项
- 安全性:操作完成后立即删除临时密码文件
- 权限:确保执行命令的用户有足够权限
- 版本差异:MySQL 8.0 与 5.7 的密码字段不同
- 生产环境:建议先在测试环境验证步骤
- 服务名称:不同安装方式的服务名可能不同(mysql、mysqld、MySQL80等)
如果以上方法都不行,可能需要查看 MySQL 错误日志获取更多信息:
sudo tail -f /var/log/mysql/error.log (自行确认具体的日志路径)