在 MySQL 中修改密码有多种方式,以下是四种常见的实现方法,适用于不同版本的 MySQL 和不同的使用场景。
1. 使用 SET PASSWORD 语句
适用场景
适用于 MySQL 5.7 及以上版本。
语法
SET PASSWORD FOR 'username'@'host' = PASSWORD('new_password');
示例
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');
注意事项
- PASSWORD() 函数在 MySQL 5.7 及以上版本中已被弃用,建议使用 ALTER USER。
2. 使用 ALTER USER 语句
适用场景
适用于 MySQL 5.7 及以上版本,推荐使用。
语法
ALTER USER 'username'@'host' IDENTIFIED BY 'new_password';
示例
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
注意事项
如果用户不存在,会报错。可以先创建用户再修改密码。
3. 使用 UPDATE 语句直接修改 mysql.user 表
适用场景
适用于所有 MySQL 版本,但需要谨慎操作。
步骤
- 登录 MySQL:
mysql -u root -p
- 切换到 mysql 数据库:
USE mysql;
- 更新密码:
UPDATE user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost';
- 刷新权限:
FLUSH PRIVILEGES;
注意事项
- 在 MySQL 5.7 及以上版本中,密码字段为 authentication_string。
- 在 MySQL 5.6 及以下版本中,密码字段为 password。
4. 使用 mysqladmin 命令行工具
适用场景
适用于通过命令行修改密码。
语法
mysqladmin -u username -p old_password password new_password
示例
mysqladmin -u root -p old_password password new_password
注意事项
- 需要知道旧密码才能修改。
- 如果旧密码错误,会提示 Access denied。
5. 特殊情况:忘记 root 密码
如果忘记了 root 密码,可以通过以下步骤重置:
步骤
停止 MySQL 服务:
sudo systemctl stop mysql
以安全模式启动 MySQL:
sudo mysqld_safe --skip-grant-tables &
登录 MySQL(无需密码):
mysql -u root
修改密码:
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
退出并重启 MySQL 服务:
sudo systemctl restart mysql
总结
方法 | 适用版本 | 特点 |
---|---|---|
SET PASSWORD | MySQL 5.7 及以上 | 简单,但 PASSWORD() 已弃用 |
ALTER USER | MySQL 5.7 及以上 | 推荐使用,语法简洁 |
修改 mysql.user 表 | 所有版本 | 直接操作数据库表,需谨慎 |
mysqladmin | 所有版本 | 命令行工具,需知道旧密码 |
根据实际需求选择合适的方法,确保密码修改后及时测试连接。