MySQL密码存储在mysql.user表中,是哈希加密后的字符串,无法直接查看明文密码,但你可以通过特定命令查询用户名和重置密码。
为什么你需要查看MySQL用户名和密码
在日常运维或开发中,想要登录MySQL服务器,突然发现密码记不得了,或者新人接手项目需要确认数据库账户信息,大家第一个念头就是“怎么查用户名和密码”,但需要先弄明白一个关键点:MySQL出于安全考虑,对密码做了哈希加密,存储在mysql库的user表里,绝不会以明文形式保存,所以直接“查看密码”是行不通的,但我们可以通过修改密码或重置密码来解决实际需求。
常见场景无非这几种:
- 本地开发环境折腾,root密码不对了
- 接手项目,只知道应用配置里有用户名,不知道密码
- 公司服务器迁移,需要重新确认数据库账户信息
- 学习时mysql忘记密码怎么办,想找回登录权限
针对这些情况,下面直接给操作步骤,让你一步步解决问题。
如何查看MySQL服务器上的所有用户名
虽然不能直接看到密码明文,但查看所有用户名非常容易,这是排查问题的第一步。
登录MySQL服务器
确保你有权限登录,如果连root都进不去,先跳转到下一节的重置密码部分,登录命令如下:
mysql -u root -p
输入密码后进入MySQL命令行界面。
查询mysql.user表
在MySQL命令行中,执行以下SQL语句:
SELECT user, host, authentication_string FROM mysql.user;
这里有几个关键字段需要注意:
- user:用户名,比如root、admin、test等
- host:允许登录的主机地址,常见的有localhost、%、127.0.0.1等
- authentication_string:这就是密码的哈希值,在MySQL 5.7及以上版本中,密码存储在这里,不是明文,是一串无意义的字符
如果你用的是MySQL 5.6或更早版本,密码字段名是Password,查询语句改为:
SELECT user, host, Password FROM mysql.user;
区分不同版本查询差异
MySQL 5.7版本开始,废弃了Password字段,改用authentication_string,如果你不确定版本,可以先用以下命令查看:
SHOW VARIABLES LIKE 'version';
- MySQL 5.7及以上

:字段名是authentication_string
- MySQL 5.6及以下:字段名是Password
查询结果怎么看
假设你看到这样一行结果:
| user | host | authentication_string |
|---|---|---|
| root | localhost | A4B64E3564A3E04F411A3B… |
这说明有一个root用户,只能在本地登录,密码哈希值是一串星号开头的乱码。你无法从这串哈希值反推出原来的密码,这是单向加密的特性。
MySQL密码重置与修改的正确方法
既然不能直接查看密码,那mysql忘记密码怎么办?最直接的办法就是重置密码,下面分场景给出操作步骤。
mysql忘记密码怎么办:windows系统重置步骤
Windows系统下,如果你忘记了root密码,可以按以下步骤操作:
- 停止MySQL服务:在服务管理器中找到MySQL服务,右键停止,或者用管理员身份运行cmd,输入:
net stop mysql
- 跳过权限表启动:在命令行中进入MySQL安装目录下的bin文件夹,执行:
mysqld --skip-grant-tables
注意:这个命令会让MySQL跳过权限验证,任何用户都可以无密码登录,务必在本地操作,不要在服务器上远程执行。
- 新开一个命令行窗口,同样进入bin目录,输入:
mysql -u root
此时不需要密码就能进入MySQL。
- 刷新权限并修改密码:在MySQL命令行中依次执行:
FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
如果你用的是MySQL 5.7以下版本,改为:
UPDATE mysql.user SET Password=PASSWORD('你的新密码') WHERE User='root'; FLUSH PRIVILEGES; - 退出并重启MySQL服务:关闭所有命令行窗口,重新启动MySQL服务,用新密码登录测试。
mysql修改root密码命令详解:Linux系统操作
Linux环境下,操作略有不同,但逻辑一致,以Ubuntu为例:
- 停止MySQL服务:
sudo systemctl stop mysql
- 安全模式启动:
sudo mysqld_safe --skip-grant-tables &

如果mysqld_safe命令找不到,可以尝试用:
sudo mysqld --skip-grant-tables --user=mysql &
- 无密码登录:
mysql -u root
- 修改密码:进入MySQL后执行:
FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
- 重启服务:先杀掉后台进程,再正常启动:
sudo pkill mysqld sudo systemctl start mysql
行业共识认为:尽量使用ALTER USER命令来修改密码,这是MySQL官方推荐的方式,兼容性更好,且能自动处理密码策略。
如何修改其他用户名密码
如果你需要修改除了root以外的用户密码,可以在正常登录MySQL后执行:
ALTER USER '用户名'@'主机' IDENTIFIED BY '新密码';
修改一个名为testuser、允许从任意主机登录的用户密码:
ALTER USER 'testuser'@'%' IDENTIFIED BY 'NewPass123';
修改完成后,用FLUSH PRIVILEGES;刷新权限,确保立即生效。
MySQL密码安全与存储特性
了解密码存储原理,能帮你避免走弯路。
为什么不能直接查看明文密码
MySQL使用哈希加密算法对密码进行加密,常见的加密方式有:
- mysql_native_password (默认)
- caching_sha2_password (MySQL 8.0默认)
这两种都是单向哈希,意味着从哈希值无法反推回原始密码,这个设计是为了防止数据库被攻破后,密码明文直接泄露。
密码哈希值能用来登录吗
不能,哈希值只是验证密码的凭证,不是密码本身,即使你复制了mysql.user表中某个用户的authentication_string,也无法直接粘贴到登录框里使用。
密码策略对重置的影响
MySQL 5.7及以上版本默认启用了密码强度验证插件validate_password,如果你设置的密码太简单,会报错:
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
此时你可以:
- 设置一个包含大小写字母、数字、特殊字符的复杂密码,比如长度至少8位
- 或者临时降低密码策略:
SET GLOBAL validate_password.policy = LOW;

实战:从配置文件找回密码线索
很多时候,你不需要重置密码,因为密码就写在应用的配置文件中。
常见配置文件位置
- PHP项目:config.php、database.php,通常包含类似
'password' => 'yourpass'的字段 - Java项目:application.properties,内容类似
spring.datasource.password=yourpass - Python项目:settings.py,有
DATABASES['default']['PASSWORD'] - WordPress:wp-config.php,有
define('DB_PASSWORD', 'yourpass');
如何查看配置文件内容
Linux下用cat命令,注意不要用vim打开乱改:
cat /var/www/html/config.php | grep password
Windows下用记事本或代码编辑器打开,搜索password关键词。
慎用,但这是我最后的办法
如果以上方法都无效,你还可以尝试用文本编辑器搜索整个项目目录,查找包含“password”或“pwd”的文件。但这个方法只适用于你拥有服务器访问权限的情况,不要用于非法用途。
Q&A:mysql查看用户名和密码常见问题
我看不到authentication_string字段,报错怎么办?
这通常是因为你的MySQL版本太低,字段名是Password而不是authentication_string,先执行SELECT VERSION();查看版本,如果是5.6及以下,用SELECT user, host, Password FROM mysql.user;,如果版本是5.7以上但找不到字段,检查一下是否有操作权限,普通用户可能被限制了访问mysql库的权限。
我修改了root密码,但登录时还是提示密码错误?
这种情况多数是因为没有刷新权限,或者密码修改语句没有生效,执行完ALTER USER或UPDATE后,必须执行FLUSH PRIVILEGES;,检查一下你的host字段,root用户可能同时存在localhost和%两个条目,你需要分别修改两者的密码,可以在修改前先查询一下:SELECT user, host FROM mysql.user WHERE user='root';
我可以用第三方工具直接查看密码吗?
不能,任何声称能直接查看MySQL明文密码的第三方工具都是不靠谱的,因为密码本身在数据库里就是密文,有些工具会尝试用字典攻击或暴力破解,但这需要海量计算时间,且成功率极低,正规的数据库管理工具如Navicat、DBeaver,只能帮你方便地执行修改密码操作,无法直接显示原密码,如果你在工具里保存了密码,它们通常是在本地加密存储,而不是从服务器读取明文。
