在mysql数据库的使用过程中,不少用户会遇到忘记root账户密码的情况,想要直接查看当前连接的root密码明文,首先需要明确mysql的密码存储机制:mysql的用户密码在系统表中是以加密哈希值的形式存储的,不会保留明文信息,因此无法直接通过数据库查询得到明文密码。

为什么无法直接查看mysql的root密码
mysql的用户认证信息存储在mysql.user表中,其中authentication_string字段(老版本为password字段)存储的是密码经过哈希算法处理后的字符串,即使你拥有root权限登录数据库,执行查询也只能得到加密后的内容,无法反向解析出明文密码。
可以执行以下语句查看加密后的密码字符串:
-- 查看root用户的加密密码 SELECT user, host, authentication_string FROM mysql.user WHERE user = 'root';
已连接场景下如何获取密码信息
如果是已经通过客户端工具成功连接到mysql的root账户,部分工具会本地缓存连接配置,可尝试从工具的配置文件中查找相关信息:
- 如果是使用命令行客户端,且之前通过
~/.my.cnf配置文件保存过连接信息,可查看该文件内容:
# 查看mysql客户端配置文件 cat ~/.my.cnf
配置文件中如果存在password字段,可能会明文存储之前保存的密码。
- 如果是使用图形化工具如Navicat、DBeaver等,可查看工具的连接配置面板,部分工具在保存连接时会记录密码,部分工具会对密码进行本地加密存储,无法直接查看明文。
忘记root密码如何重置
如果无法通过上述方式获取密码,最可靠的方式是重置root密码,步骤如下:
1. 停止mysql服务
# 不同系统停止服务的命令不同 # CentOS/RHEL系统 systemctl stop mysqld # Ubuntu/Debian系统 systemctl stop mysql
2. 跳过权限验证启动mysql
# 跳过权限表启动mysql服务 mysqld_safe --skip-grant-tables &
3. 无密码登录并修改root密码
-- 无密码登录mysql
mysql -u root
-- 切换到mysql系统库
USE mysql;
-- 修改root密码,注意不同mysql版本语法不同
-- MySQL 5.7及以上版本
UPDATE user SET authentication_string = PASSWORD('new_password') WHERE user = 'root';
-- MySQL 8.0及以上版本
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
-- 刷新权限
FLUSH PRIVILEGES;
4. 重启mysql服务
# 先结束跳过权限的进程,再正常启动服务 systemctl stop mysqld systemctl start mysqld
注意事项
重置密码后,之前所有使用旧密码的连接都会失效,需要同步更新所有应用中的数据库连接配置。另外建议密码设置时遵循复杂度要求,包含大小写字母、数字和特殊字符,避免再次出现忘记密码的情况。
注意:不要尝试使用第三方工具破解mysql的加密密码哈希值,这类操作不仅成功率极低,还可能违反数据安全相关规定。