云计算运维

Windows Server 2003 - Windows Server 2019 系统工具,Linux系统脚本,Mysql、Nginx、PHP、Redis、K8S、Seafile、Weblogic 、Jenkins、DNS、DHCP、FTP、IIS、Zookeeper、Rabbitmq、Oracle、Tomcat、Mavrn等服务搭建维护,请关注我.

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

注意事项

  1. 安全性:操作完成后立即删除临时密码文件
  2. 权限:确保执行命令的用户有足够权限
  3. 版本差异:MySQL 8.0 与 5.7 的密码字段不同
  4. 生产环境:建议先在测试环境验证步骤
  5. 服务名称:不同安装方式的服务名可能不同(mysql、mysqld、MySQL80等)

如果以上方法都不行,可能需要查看 MySQL 错误日志获取更多信息:

sudo tail -f /var/log/mysql/error.log  (自行确认具体的日志路径)
  • 分享: