修改MySQL用户密码是数据库管理中常见的操作,不同MySQL版本、不同操作场景下对应的修改方式有所不同,需要根据实际情况选择合适的方法。

登录MySQL后修改当前用户密码
如果已经成功登录到MySQL数据库,修改当前登录用户自身的密码是最简单的场景,不同版本的语法如下:
MySQL 5.7及以下版本
这类版本可以通过SET PASSWORD语句或者更新mysql.user表的方式修改密码:
-- 方式1:使用SET PASSWORD语句
SET PASSWORD = PASSWORD('new_password_123');
-- 方式2:直接更新用户表,需要刷新权限生效
UPDATE mysql.user SET authentication_string = PASSWORD('new_password_123') WHERE User = 'root';
FLUSH PRIVILEGES;
MySQL 8.0及以上版本
MySQL 8.0版本移除了PASSWORD()函数,修改密码的语法有所调整:
-- 使用ALTER USER语句修改当前用户密码 ALTER USER USER() IDENTIFIED BY 'new_password_123';
登录MySQL后修改其他用户密码
如果是拥有管理员权限的用户,想要修改其他普通用户的密码,同样分版本处理:
MySQL 5.7及以下版本
-- 假设要修改的用户是test_user,host是localhost
SET PASSWORD FOR 'test_user'@'localhost' = PASSWORD('new_password_456');
-- 或者通过更新用户表实现
UPDATE mysql.user SET authentication_string = PASSWORD('new_password_456') WHERE User = 'test_user' AND Host = 'localhost';
FLUSH PRIVILEGES;
MySQL 8.0及以上版本
-- 使用ALTER USER指定用户修改密码 ALTER USER 'test_user'@'localhost' IDENTIFIED BY 'new_password_456';
未登录MySQL时修改密码
如果忘记密码或者无法登录MySQL,可以通过命令行方式修改,步骤如下:
步骤1:停止MySQL服务
不同系统的停止命令不同:
- Linux系统:
systemctl stop mysqld或者service mysqld stop - Windows系统:
net stop mysql
步骤2:跳过权限表启动MySQL
启动MySQL时添加--skip-grant-tables参数,这样登录不需要密码:
# Linux系统执行 mysqld_safe --skip-grant-tables &
步骤3:无密码登录并修改密码
打开新的终端,直接输入mysql即可登录,然后执行密码修改操作:
-- 先刷新权限,否则可能无法修改 FLUSH PRIVILEGES; -- 修改root用户密码,这里以MySQL 8.0为例 ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_root_password';
步骤4:重启MySQL服务
修改完成后,先停止跳过权限表的MySQL进程,再正常启动服务:
# Linux系统重启 systemctl restart mysqld
常见问题及解决方法
- 问题1:执行修改密码语句时报错
ERROR 1064 (42000): You have an error in your SQL syntax,通常是版本对应的语法错误,需要检查是否使用了对应版本的正确语法,比如MySQL 8.0不要使用PASSWORD()函数。 - 问题2:修改密码后无法登录,可能是没有执行
FLUSH PRIVILEGES刷新权限,或者密码中包含特殊字符没有正确转义,建议密码使用字母、数字、下划线的组合。 - 问题3:跳过权限表启动后还是无法登录,需要检查MySQL的进程是否完全停止,避免旧进程占用端口。
注意:修改密码后建议记录好新密码,同时避免将密码明文存储在公共位置,定期更新密码可以提升数据库的安全性。