在CentOS系统中重置MySQL或MariaDB初始密码的核心方法是:通过修改系统配置文件跳过权限验证启动数据库服务,登录数据库后使用SQL语句修改root用户密码,最后恢复配置文件并重启服务。
很多运维新手在接手服务器时,常遇到忘记数据库密码的窘境,CentOS作为企业级Linux的主流选择,其自带的数据库软件版本迭代较快,导致不同版本的修复路径存在差异,本文将基于2026年的技术环境,详细拆解这一常见故障的修复流程,确保你能快速恢复对数据库的控制权。
CentOS 7/8 环境下 MariaDB 密码重置实操
CentOS 7 及后续版本默认使用 MariaDB 作为 MySQL 的兼容替代品,由于 MariaDB 在权限管理上更加严格,传统的直接修改密码方式往往失效,必须采用“跳过授权表”的方式。
停止数据库服务并修改配置
你需要获取服务器的 root 权限,在终端中输入以下命令停止正在运行的 MariaDB 服务:
- 执行
systemctl stop mariadb停止服务。 - 使用编辑器打开 MariaDB 的配置文件,路径通常为
/etc/my.cnf或/etc/my.cnf.d/server.cnf。 - 在
[mysqld]字段下添加一行配置:skip-grant-tables,这行配置的作用是告诉数据库在启动时不加载权限表,从而允许无密码登录。
启动服务并进入数据库
配置保存后,重新启动 MariaDB 服务:
- 执行
systemctl start mariadb。 - 直接输入
mysql -u root即可进入数据库命令行界面,无需输入密码。
修改 Root 用户密码
进入数据库后,你需要手动刷新权限表,因为当前处于跳过验证模式,标准的 FLUSH PRIVILEGES 是必须的步骤,接着执行以下 SQL 语句来更新密码:
- 执行
FLUSH PRIVILEGES;刷新权限。 - 执行
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';,注意,这里的单引号不能省略。 - 如果上述命令报错,说明版本较老,可尝试使用
UPDATE mysql.user SET password=PASSWORD('你的新密码') WHERE User='root';配合FLUSH PRIVILEGES;。

恢复配置并重启
密码修改成功后,必须恢复初始配置以保障数据库安全:
- 再次编辑配置文件,删除或注释掉
skip-grant-tables这一行。 - 执行
systemctl restart mariadb重启服务。 - 使用新密码登录验证:
mysql -u root -p。
业内专家指出,这种基于配置文件的修改方式虽然有效,但在高并发生产环境中需谨慎操作,建议在业务低峰期进行。
CentOS 8/9 环境下 MySQL 8.0+ 密码重置差异
随着 CentOS 8 的普及,MySQL 8.0 及以上版本成为主流,MySQL 8.0 引入了新的认证插件 caching_sha2_password,这使得旧版本的密码重置脚本往往失效。
针对 MySQL 8.0 的特殊处理
与 MariaDB 类似,首先需要停止服务并修改配置文件 /etc/my.cnf,在 [mysqld] 下添加 skip-grant-tables 并保存,随后启动服务并登录。
使用正确的 SQL 语法修改密码
在 MySQL 8.0 中,直接修改密码字段可能不被支持,推荐的标准流程如下:
- 执行
FLUSH PRIVILEGES;。 - 执行
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的新密码';,这里指定了mysql_native_password插件,以兼容大多数客户端工具。 - 再次执行
FLUSH PRIVILEGES;确保更改生效。
验证与恢复
退出数据库,编辑配置文件移除 skip-grant-tables 行,重启 MySQL 服务,使用新密码登录,如果客户端连接报错,请检查客户端是否支持 caching_sha2_password 插件,必要时在配置文件中全局设置 default_authentication_plugin=mysql_native_password。
行业共识认为,MySQL 8.0 的密码策略更加复杂,建议同时设置强密码策略,避免使用简单字符组合,以提升数据库安全性。

常见问题排查与对比分析
在实际操作中,用户常遇到无法重启服务或密码仍无效的情况,以下是几种典型场景的对比与解决方案。
服务启动失败的处理
如果在添加 skip-grant-tables 后无法启动服务,通常是因为配置文件语法错误或权限问题:
- 检查配置文件路径是否正确,CentOS 8 中可能位于
/etc/my.cnf.d/mysql-server.cnf。 - 确保配置文件中的缩进和格式正确,避免多余的空格或特殊字符。
- 查看系统日志
journalctl -xe或/var/log/mariadb/mariadb.log,获取具体的错误信息。
密码修改后仍无法登录
这种情况多发生在权限未刷新或插件不匹配时:
- 确认是否执行了
FLUSH PRIVILEGES;。 - 检查用户主机名是否为
localhost,如果是远程登录,需修改'root'@'%'的密码。 - 确认客户端是否支持新的认证插件,必要时在连接字符串中指定插件类型。
不同数据库版本重置方式对比
| 特性 | MariaDB 10.3+ | MySQL 8.0+ |
|---|---|---|
| 配置文件路径 | /etc/my.cnf 或 /etc/my.cnf.d/server.cnf |
/etc/my.cnf |
| 跳过授权参数 | skip-grant-tables |
skip-grant-tables |
| 密码修改语法 | ALTER USER ... IDENTIFIED BY ... |
ALTER USER ... IDENTIFIED WITH ... BY ...
|
| 常见认证插件 | mysql_native_password |
caching_sha2_password |
据工信部数据,近年来企业级服务器中 MySQL 和 MariaDB 的使用比例趋于平衡,但 MySQL 在大型互联网应用中占据较大比例,掌握两者的重置差异显得尤为重要。
MySQL MariaDB 重置初始密码常见疑问解答
CentOS 系统 MySQL/MariaDB 重置初始密码失败怎么办?
如果常规方法无效,首先检查配置文件是否正确加载,确保在 [mysqld] 段落下添加参数,而非 [client] 段,检查 SELinux 状态,若开启,可能阻止数据库读取修改后的配置,可使用 setenforce 0 临时关闭 SELinux 进行测试,若成功则需配置 SELinux 策略,检查磁盘空间是否已满,空间不足会导致数据库无法写入日志或数据文件,从而启动失败。
重置密码后数据库连接超时如何解决?
连接超时通常与防火墙或安全组设置有关,CentOS 默认使用 firewalld 管理端口,需执行 firewall-cmd --permanent --add-port=3306/tcp 开放端口,并执行 firewall-cmd --reload 重载配置,若使用云服务商,还需在控制台的安全组规则中添加 3306 端口的入站允许规则,检查 MySQL 配置文件中的 bind-address 是否设置为 0.0.1,若需远程访问,应改为 0.0.0 或服务器公网 IP。
如何防止密码重置过程中的数据丢失?
在修改配置重启服务前,务必对数据库文件进行备份,CentOS 中数据库文件通常位于 /var/lib/mysql 或 /var/lib/mariadb,可使用 tar -czvf backup.tar.gz /var/lib/mysql 命令打包备份,若重置过程中出现异常,可通过恢复备份文件来还原数据,建议在测试环境中先模拟重置流程,确认无误后再在生产环境执行。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/398482.html

