mysql修改密码

本文整理了不同场景下 MySQL 密码修改的方法,涵盖「记得密码」「忘记密码」「修改其他用户密码」及「MySQL 8.0+ 特殊处理」,适配 Windows/Linux/macOS 系统。

一、记得当前密码(正常登录修改)

适用于能正常登录 MySQL,仅需更换密码的场景,推荐优先使用 ALTER USER 命令。

1. MySQL 命令行修改

命令类型 适用版本 执行语句
ALTER USER(推荐) MySQL 5.7.6+ ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
SET PASSWORD MySQL 5.7.5 及以下 SET PASSWORD FOR 'root'@'localhost' = PASSWORD('你的新密码');
SET PASSWORD MySQL 8.0+ SET PASSWORD FOR 'root'@'localhost' = '你的新密码';
UPDATE(不推荐) 所有版本 UPDATE mysql.user SET authentication_string = PASSWORD('你的新密码') WHERE User = 'root' AND Host = 'localhost'; FLUSH PRIVILEGES;

2. mysqladmin 工具修改(命令行)

复制代码
mysqladmin -u root -p password "你的新密码"
# 执行后会提示输入当前密码,验证通过后修改

二、忘记密码(重置 root 密码)

适用于无法登录 MySQL,需强制重置 root 密码的场景,分系统适配不同方法。

1. Windows 系统

方法 A:--init-file 法(推荐,更安全)
  1. 创建初始化文件:新建 C:\mysql-init.txt,写入:

    复制代码
    ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
  2. 停止 MySQL 服务:

    复制代码
    net stop mysql
    # 若失效,尝试:sc stop mysql
  3. 安全模式启动并执行文件(替换 my.ini 实际路径):

    复制代码
    mysqld --defaults-file="C:\ProgramData\MySQL\MySQL Server 8.0\my.ini" --init-file="C:\mysql-init.txt" --console
  4. 重启正常服务:

    复制代码
    net start mysql
方法 B:--skip-grant-tables 法(应急)
  1. 停止 MySQL 服务:net stop mysql

  2. 新建 reset.bat 批处理文件,内容:

    复制代码
    @echo off
    mysqld --skip-grant-tables --shared-memory --console
  3. 以管理员身份运行 reset.bat,保持窗口开启;

  4. 新开管理员命令行,无密码登录:mysql -u root

  5. 执行重置命令(按版本选择):

    复制代码
    -- MySQL 5.7.6+
    ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
    -- MySQL 5.7.5 及以下
    UPDATE mysql.user SET authentication_string = PASSWORD('你的新密码') WHERE User = 'root' AND Host = 'localhost';
    FLUSH PRIVILEGES;
  6. 关闭 reset.bat 窗口,重启 MySQL 服务:net start mysql

2. Linux/macOS 系统

方法 A:--skip-grant-tables 法(通用)
  1. 停止 MySQL 服务:

    复制代码
    sudo systemctl stop mysql
    # 或:sudo service mysql stop
  2. 安全模式启动:

    复制代码
    sudo mysqld_safe --skip-grant-tables --skip-networking &
  3. 无密码登录:mysql -u root

  4. 执行重置命令(按版本选择):

    复制代码
    USE mysql;
    -- MySQL 8.0+
    ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
    -- MySQL 5.7
    UPDATE user SET authentication_string = PASSWORD('你的新密码') WHERE User = 'root';
    FLUSH PRIVILEGES;
    EXIT;
  5. 重启服务:sudo systemctl restart mysql

方法 B:debian-sys-maint 法(Debian/Ubuntu 专属)
复制代码
# 1. 查看系统自动生成的管理密码
sudo cat /etc/mysql/debian.cnf
# 2. 使用该密码登录 MySQL
mysql -u debian-sys-maint -p
# 3. 修改 root 密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';

三、修改其他用户密码

适用于修改非 root 用户的密码,格式统一,仅需替换用户名 / 主机名:

复制代码
-- 通用格式
ALTER USER '用户名'@'主机名' IDENTIFIED BY '新密码';

-- 示例1:修改 admin 用户(允许所有主机访问)
ALTER USER 'admin'@'%' IDENTIFIED BY 'new_password123';
-- 示例2:修改 test 用户(仅本地访问)
ALTER USER 'test'@'localhost' IDENTIFIED BY 'testpass';

四、MySQL 8.0+ 特殊注意事项

1. 密码策略限制(无法设置简单密码)

复制代码
-- 1. 查看当前密码策略
SHOW VARIABLES LIKE 'validate_password%';
-- 2. 临时降低策略强度(测试环境,重启失效)
SET GLOBAL validate_password.policy = LOW;
SET GLOBAL validate_password.length = 4;
-- 3. 再修改密码(示例:设置简单密码 1234)
ALTER USER 'root'@'localhost' IDENTIFIED BY '1234';

2. 认证插件兼容问题(caching_sha2_password 错误)

MySQL 8.0 默认使用 caching_sha2_password 插件,老客户端可能兼容失败,需切换为旧版插件:

复制代码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的新密码';

五、修改后验证

  1. 测试新密码登录:

    复制代码
    mysql -u root -p
    # 输入新密码,能登录则生效
  2. 查看用户密码信息:

    复制代码
    SELECT user, host, authentication_string FROM mysql.user;

六、快速选择指南

场景 推荐方法
记得当前密码 使用 ALTER USER 命令
忘记 root 密码(Windows) --init-file 法
忘记 root 密码(Linux/macOS) --skip-grant-tables 法
MySQL 8.0+ 设置简单密码 先降低密码策略,再修改密码
老客户端连接 MySQL 8.0+ 修改认证插件为 mysql_native_password

重要提醒

  1. 密码修改后立即测试,避免登录失败;
  2. 生产环境务必使用强密码(数字 + 字母 + 特殊符号);
  3. 修改前建议备份数据库,防止操作失误;
  4. 远程连接需修改 'root'@'%' 密码,而非仅 'root'@'localhost'。
相关推荐
Lancker2 天前
记一次 Druid 连接 MySQL 报 Communications link failure 的排查过程
数据库·mysql·adb
JosieBook3 天前
【数据库】MySQL 实战精通系列 · 第1篇:MySQL 全局观与实战环境搭建
数据库·mysql·adb
蒸鱼Yuzheng3 天前
设备端性能工件可靠导出:断点续传、哈希、manifest 与失败恢复
android·自动化测试·python·adb·数据完整性
文人sec12 天前
grant 之后要跟着 flush privileges 吗?要不要使用分区表?
数据库·mysql·adb·数据分析
2501_9160088913 天前
SSE 和 gRPC 流式接口如何抓包,调试 SSE 与 gRPC 流式接口
网络协议·计算机网络·网络安全·ios·adb·https·udp
2501_9160088915 天前
全平台抓包工具,Windows、iPhone、Linux三个平台抓包测试
网络协议·计算机网络·网络安全·ios·adb·https·udp
鸽芷咕18 天前
MySQL Server 鸿蒙 PC 适配全记录:以混合工具链完成 C++23 交叉编译与 HNP 交付
adb·harmonyos·c++23
游戏开发爱好者820 天前
网络连接排查指南,谁在电脑后台偷跑流量,哪些程序在联网
网络协议·计算机网络·网络安全·ios·adb·https·udp
实心儿儿20 天前
MySQL 的安装
数据库·mysql·adb
2601_9623004720 天前
基于Python与Tkinter的ADB Monkey自动化测试脚本开发
python·adb·tkinter·android测试·gui自动化