在服务器管理和数据库维护工作中,忘记MySQL root密码是一个相当常见但又令人头疼的问题,尤其是在CentOS这样的企业级操作系统上,数据库的安全性至关重要,重置密码需要遵循严谨的步骤,以确保数据安全和系统稳定,本文将详细介绍在CentOS系统中,无论是使用MySQL还是其分支MariaDB,如何安全、有效地重置root密码,整个过程将涵盖从准备工作到最终验证的每一个环节。

准备工作:确保权限与环境
在开始操作之前,请务必确认您具备以下条件:
- 服务器访问权限:您必须拥有CentOS服务器的root权限,或者一个具有
sudo权限的普通用户账户,因为停止和启动系统服务需要管理员权限。 - 数据库已安装:服务器上已经安装了MySQL或MariaDB服务。
- 命令行操作能力:整个过程将通过SSH等终端工具以命令行形式完成。
整个重置密码的核心思想是:以一种“跳过权限验证”的特殊模式启动MySQL服务,然后无密码登录并修改密码,最后恢复正常模式。
详细步骤:重置MySQL/MariaDB root密码
以下步骤适用于大多数现代版本的MySQL(5.7及以上)和MariaDB(10.1及以上),如果您的版本较旧,部分命令语法会有所不同,后文将特别说明。
第一步:停止MySQL服务
我们需要正常停止当前运行的MySQL或MariaDB服务,在CentOS 7及之后的版本中,通常使用systemctl命令。
# 对于MySQL sudo systemctl stop mysqld # 对于MariaDB sudo systemctl stop mariadb
您可以通过sudo systemctl status mysqld(或mariadb)来确认服务是否已经成功停止。
第二步:以“跳过权限验证”模式启动MySQL
这是最关键的一步,我们将启动MySQL服务,但告诉它忽略加载授权表,这样任何用户都可以无需密码连接数据库。
sudo mysqld_safe --skip-grant-tables &
这里对命令进行解释:
mysqld_safe:MySQL服务器启动脚本,它会在服务器启动时监控并记录错误日志。--skip-grant-tables:这是一个非常重要的选项,它指示服务器启动时不使用权限系统,即所有用户都拥有最高权限。&:这个符号让进程在后台运行,这样我们可以继续在当前的终端会话中执行其他命令。
执行此命令后,屏幕可能会显示一些日志信息,然后返回到命令提示符,MySQL服务已经在后台以特殊模式运行。
第三步:无密码登录MySQL
我们可以直接以root用户身份登录MySQL,而无需任何密码。
mysql -u root
您将看到MySQL的命令行提示符 mysql>,表示已成功连接。

第四步:修改root密码
进入MySQL命令行后,我们需要选择mysql数据库并执行修改密码的命令,这里,根据您的数据库版本,命令语法有所不同。
对于MySQL 5.7.6+ 或 MariaDB 10.1.20+:
这些新版本推荐使用ALTER USER语句来修改密码。
-- 切换到mysql系统数据库 USE mysql; -- 修改root用户的密码 -- 请将 '你的新密码' 替换为您想设置的实际密码 ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码'; -- 刷新权限,使更改立即生效 FLUSH PRIVILEGES; -- 退出MySQL quit;
对于旧版本(如MySQL 5.7.5及更早,MariaDB 10.1.20及更早):
旧版本使用UPDATE语句直接修改user表中的password字段。
-- 切换到mysql系统数据库
USE mysql;
-- 更新root用户的密码
-- PASSWORD()函数用于对密码进行加密
UPDATE user SET password=PASSWORD('你的新密码') WHERE User='root';
-- 刷新权限
FLUSH PRIVILEGES;
-- 退出MySQL
quit; 为了更清晰地展示区别,请参考下表:
| 数据库版本 | 推荐修改命令 | 关键点 |
|---|---|---|
| MySQL 5.7.6+ / MariaDB 10.1.20+ | ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码'; | 现代标准,直接操作用户账户 |
| MySQL 5.7.5- / MariaDB 10.1.20- | UPDATE user SET password=PASSWORD('新密码') WHERE User='root'; | 直接修改系统表,依赖PASSWORD()函数 |
注意:如果您启用了密码验证插件(如validate_password),新密码必须符合其策略要求(如长度、包含大小写字母、数字和特殊符号等),否则会设置失败。
第五步:重启MySQL服务到正常模式
密码已经修改完毕,现在我们需要关闭“跳过权限验证”模式的进程,并让MySQL以正常模式重新启动。
找到并终止后台运行的mysqld_safe进程。
sudo pkill mysqld
正常启动MySQL服务。

# 对于MySQL sudo systemctl start mysqld # 对于MariaDB sudo systemctl start mariadb
第六步:验证新密码
最后一步是验证新密码是否设置成功,使用以下命令登录,系统会提示您输入密码。
mysql -u root -p
输入您在第四步中设置的新密码,如果能成功登录,看到mysql>提示符,那么恭喜您,密码重置已全部完成!
相关问答FAQs
问题1:如果我没有sudo权限,还能重置MySQL密码吗?
解答:不能,重置MySQL密码的过程涉及到停止和启动系统级服务(mysqld),以及以特殊模式运行它,这些都是需要root或管理员权限的操作,如果您是普通用户,唯一的方法是联系服务器的系统管理员,请求他们协助您完成密码重置。
问题2:在修改密码时,提示“Your password does not satisfy the current policy requirements”怎么办?
解答:这个错误意味着您设置的新密码不符合MySQL当前生效的密码策略,这通常是因为安装了validate_password插件,您有两个选择:一是设置一个符合策略的复杂密码(通常要求至少8位,包含大小写字母、数字和特殊符号);二是临时调整密码策略要求,修改完密码后再改回来,临时降低策略要求的命令如下(在mysql>命令行中执行):
SET GLOBAL validate_password.policy=LOW; SET GLOBAL validate_password.length=6;
执行完这两条命令后,再尝试使用ALTER USER命令设置一个相对简单的密码即可,修改完成后,建议将策略恢复为默认值以保证安全性。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复