mysql作为常用的关系型数据库,用户密码管理是数据库安全维护的基础操作,不同场景下修改用户密码的方式存在差异,需要根据实际情况选择合适的方法。

命令行直接修改密码
如果是刚安装mysql需要设置root用户密码,或者已经登录到mysql服务器,可以使用mysqladmin工具直接修改,这种方式适合快速修改已知密码的用户密码。
命令格式如下,其中username是要修改密码的用户名,oldpassword是原密码,newpassword是新密码:
# 已知原密码修改 mysqladmin -u username -p oldpassword password newpassword # 如果是首次设置root密码,原密码部分可以省略 mysqladmin -u root password newpassword
使用ALTER USER语句修改
ALTER USER是mysql官方推荐的修改用户密码的方式,适用于mysql 5.7.6及以上版本,语法规范且支持同时修改用户的多个属性。
基本语法如下,修改完成后需要执行刷新权限语句让修改生效:
-- 修改指定用户的密码 ALTER USER 'username'@'host' IDENTIFIED BY 'newpassword'; -- 刷新权限 FLUSH PRIVILEGES;
如果要修改当前登录用户的密码,可以简化语句:
ALTER USER USER() IDENTIFIED BY 'newpassword'; FLUSH PRIVILEGES;
使用SET PASSWORD语句修改
SET PASSWORD语句是mysql中修改密码的传统方式,兼容大部分mysql版本,既可以用在命令行也可以用SQL执行环境。
修改其他用户密码的语法:
SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword');
FLUSH PRIVILEGES;
修改当前登录用户密码的语法:
SET PASSWORD = PASSWORD('newpassword');
FLUSH PRIVILEGES;
直接修改mysql.user表
这种方式适合无法使用上述语句的特殊场景,比如忘记root密码进入安全模式后操作,需要注意不同mysql版本的user表字段名称有差异。
mysql 5.7及以上版本的user表中密码字段是authentication_string,修改语句如下:
UPDATE mysql.user SET authentication_string = PASSWORD('newpassword') WHERE User = 'username' AND Host = 'host';
FLUSH PRIVILEGES;
mysql 5.6及以下版本的user表中密码字段是Password,修改语句如下:
UPDATE mysql.user SET Password = PASSWORD('newpassword') WHERE User = 'username' AND Host = 'host';
FLUSH PRIVILEGES;
忘记root密码时的修改方式
如果忘记了root用户密码,需要先跳过权限验证启动mysql服务,再执行密码修改操作。
步骤如下:
- 停止mysql服务:systemctl stop mysqld 或者 service mysql stop
- 跳过权限表启动mysql:mysqld --skip-grant-tables &
- 无密码登录mysql:mysql -u root
- 执行上述任意一种修改密码的语句,推荐用UPDATE修改user表的方式
- 重启mysql服务,用新密码登录验证
操作注意事项
修改密码时需要注意以下几点,避免出现权限问题:
- 修改完成后一定要执行
FLUSH PRIVILEGES语句,否则修改不会立即生效 - 用户标识由用户名和host组成,修改时要确认host信息,比如'root'@'localhost'和'root'@'%'是两个不同的用户
- 密码设置要符合mysql的密码策略要求,否则会修改失败,可以通过
SHOW VARIABLES LIKE 'validate_password%';查看当前密码策略 - 生产环境修改密码前建议先备份mysql.user表,避免操作失误导致无法登录
| 修改方式 | 适用版本 | 操作难度 | 推荐程度 |
|---|---|---|---|
| ALTER USER语句 | mysql 5.7.6+ | 低 | 高 |
| SET PASSWORD语句 | 全版本 | 低 | 中 |
| mysqladmin工具 | 全版本 | 低 | 中 |
| 修改user表 | 全版本 | 中 | 低 |
mysql修改用户密码ALTER_USERSET_PASSWORDUPDATE_user修改时间:2026-07-22 06:18:23