在Linux服务器上部署mysql数据库后,修改用户密码是日常运维中常见的操作,不同场景下需要选择不同的修改方式,操作前建议先确认mysql的版本信息,避免命令不兼容导致操作失败。

操作前准备
首先需要确认当前mysql的版本,不同版本的密码修改语法存在差异,执行以下命令查看版本:
mysql --version
如果还没有登录mysql,需要先通过现有密码登录,登录命令如下:
mysql -u root -p
输入当前密码后即可进入mysql交互终端。
已知当前密码时的修改方法
方法一:使用ALTER USER语句(mysql 5.7.6及以上版本推荐)
这种方式是官方推荐的修改密码方式,语法规范且兼容性好,修改root用户密码的示例如下:
-- 修改root用户密码,localhost表示只允许本地登录 ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password_123'; -- 刷新权限使修改生效 FLUSH PRIVILEGES;
如果需要修改其他用户的密码,只需要替换用户名和主机地址即可,比如修改用户test的密码:
ALTER USER 'test'@'%' IDENTIFIED BY 'test_new_password'; FLUSH PRIVILEGES;
方法二:使用SET PASSWORD语句(通用版本)
这种方式兼容大多数mysql版本,操作逻辑简单,示例如下:
-- 修改当前登录用户的密码
SET PASSWORD = PASSWORD('new_password_123');
-- 修改指定用户的密码,需要有权限操作
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password_123');
FLUSH PRIVILEGES;
注意PASSWORD函数在mysql 8.0版本中已经被移除,如果使用mysql 8.0及以上版本,不能使用这种方式。
方法三:直接修改mysql.user表(兼容老版本)
对于mysql 5.6及更早的版本,可以直接修改存储用户信息的user表来重置密码,操作如下:
-- 切换到mysql系统库
USE mysql;
-- 更新root用户的密码字段,老版本密码字段是Password
UPDATE user SET Password = PASSWORD('new_password_123') WHERE User = 'root' AND Host = 'localhost';
-- 刷新权限
FLUSH PRIVILEGES;
忘记root密码时的重置方法
如果忘记了root用户的密码,无法正常登录mysql,需要通过跳过权限验证的方式重置密码,操作步骤如下:
第一步:停止mysql服务
根据Linux的初始化系统选择对应命令:
# systemctl管理的系统 sudo systemctl stop mysqld # service管理的系统 sudo service mysql stop
第二步:跳过权限表启动mysql
启动mysql时添加--skip-grant-tables参数,这样登录不需要密码:
sudo mysqld --skip-grant-tables --user=mysql &
第三步:无密码登录mysql并修改密码
打开新的终端窗口,直接执行登录命令,不需要输入密码:
mysql -u root
登录后执行以下命令修改密码,注意mysql 5.7及以上版本的密码字段是authentication_string,不是Password:
USE mysql;
-- mysql 5.7及以上版本
UPDATE user SET authentication_string = PASSWORD('new_password_123') WHERE User = 'root' AND Host = 'localhost';
-- mysql 5.6及以下版本
-- UPDATE user SET Password = PASSWORD('new_password_123') WHERE User = 'root' AND Host = 'localhost';
FLUSH PRIVILEGES;
第四步:重启mysql服务
先结束跳过权限的mysql进程,再正常启动服务:
# 查找mysqld进程并结束 sudo pkill mysqld # 正常启动mysql sudo systemctl start mysqld # 或者 sudo service mysql start
之后就可以用新密码正常登录mysql了。
注意事项
- 密码设置尽量包含大小写字母、数字和特殊字符,长度不低于8位,提升账户安全性
- 修改密码后一定要执行
FLUSH PRIVILEGES命令,否则修改可能不会立即生效 - 操作前建议备份mysql的用户表,避免误操作导致所有用户无法登录
- 如果是生产环境,修改密码前需要确认相关应用的数据库配置,避免密码修改后应用连接失败