服务器上MySQL的用户名和密码通常无法直接“查看”,因为密码以加密哈希形式存储,但你可以通过配置文件、命令行工具或重置密码的方式获取访问权限。
为什么你“看不到”MySQL密码,只能重置或读取配置
很多朋友第一次接触服务器时,会习惯性地想找到某个文件,里面明文写着MySQL的用户名和密码,这里需要先澄清一个基础认知:MySQL数据库的密码并非明文存储,在mysql.user系统表中,保存的是经过PASSWORD()函数加密后的哈希字符串,即便你执行SELECT FROM mysql.user;,看到的也是一长串如6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9的密文,无法逆向还原出原始密码。
但这不代表你无计可施,在实际运维场景中,我们解决“不知道MySQL密码”这个问题,通常走三条路:
- 从配置文件或历史记录中找回适用于密码并未丢失,只是你忘了存在哪里的情况。
- 通过命令行免密登录后重置适用于拥有服务器root权限,但完全不知道MySQL密码的场景。
- 使用可视化面板或云服务商控制台适用于使用了宝塔面板、phpMyAdmin或云数据库RDS的情况。
下面我们逐一拆解,你可以根据自己属于哪种情况对号入座。
密码没丢,只是找不到在哪台服务器上配置的
这是最常见的情况,很多开发者继承了前任同事的服务器,或者自己很久以前配置过,只记得当时写进了某个文件,此时按以下优先级排查。
优先检查MySQL配置文件
MySQL的主配置文件通常叫my.cnf(Linux)或my.ini(Windows),里面可能直接包含user和password参数,虽然不推荐这种写法,但确实存在于不少生产环境中。
常见路径如下:
/etc/my.cnf/etc/mysql/my.cnf/etc/mysql/mysql.conf.d/mysqld.cnf- 如果是通过源码编译安装,路径可能在
/usr/local/mysql/etc/my.cnf
查找命令:
find / -name ".cnf" -type f 2>/dev/null | xargs grep -l "password"
如果找到了my.cnf,直接执行:
cat /etc/my.cnf | grep -E "user|password"
看到类似password=yourpassword这样的明文配置,直接拿来用即可。
检查应用项目的数据库连接配置文件
MySQL的密码通常会写在你网站或应用的后端配置里。
- PHP项目:
.env文件或config/database.php中的DB_PASSWORD - Java项目:
application.yml或application.properties中的spring.datasource.password - Python项目:
settings.py中的DATABASES['default']['PASSWORD']
- Node.js项目:
.env文件中的DB_PASS
这些文件都在你的网站根目录下,通过FTP或SSH登录都能找到。注意不要把这些文件提交到Git仓库,这是另一个安全话题了。
查看命令行历史记录
如果你曾经在服务器上手动执行过mysql -u root -p'密码'这样的命令,历史记录里可能留有线索。
history | grep mysql
或
cat ~/.bash_history | grep mysql
root用户的历史记录通常不在普通用户目录下,需要用sudo cat /root/.bash_history查看。
密码完全丢失,需要用root权限重置
如果上述配置文件中什么都没有,那只能走重置流程了,这里有个关键前提:你需要拥有Linux服务器的root权限,或者能够通过sudo提权,有了这个权限,MySQL的密码形同虚设,因为我们可以直接绕过它。
跳过授权表启动MySQL
首先停掉MySQL服务:
sudo systemctl stop mysql
或对于较老的CentOS系统:
sudo service mysqld stop
然后使用跳过授权表的方式后台启动:
sudo mysqld_safe --skip-grant-tables &
如果你使用的是MySQL 8.0+,可能需要用这种方式:
sudo mysqld --skip-grant-tables --skip-networking &
--skip-networking的作用是禁止远程连接,避免在免密状态下被外部访问,建议务必加上。
免密登录并修改密码
执行:
mysql -u root
此时应该能直接进入MySQL命令行,不需要密码,然后切换到MySQL系统库:
FLUSH PRIVILEGES;
重置密码的命令根据MySQL版本有所不同。
MySQL 5.7及以下版本:
UPDATE mysql.user SET authentication_string=PASSWORD('你的新密码') WHERE User='root';
FLUSH PRIVILEGES;
MySQL 8.0及以上版本:
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码'; FLUSH PRIVILEGES;
重启恢复正常模式
退出MySQL命令行,然后杀掉跳过授权表的进程,正常重启:
sudo killall mysqld sudo systemctl start mysql
这样你的MySQL密码就重置成功了。
你用的是宝塔面板或云厂商RDS
如果你在服务器上安装了宝塔面板,MySQL密码查看变得更加简单,因为面板本身就提供了可视化管理功能。

登录宝塔面板后台,依次点击 数据库 → root密码,即可看到当前MySQL的root密码,也可以直接修改,如果你忘记了面板本身的登录地址和账号,通过SSH执行:
bt default
即可显示出面板的访问地址、用户名和密码。
对于使用简米云RDS、酷番云CDB等托管数据库的用户,密码可以直接在云控制台的实例详情页中找到“重置密码”选项,云厂商不会明文显示旧密码,但重置新密码只需要手机验证即可完成。
当你遇到MySQL不知道密码时的几个真实场景
很多新人在实际操作中会遇到具体卡壳的情况,这里列举几个常见问题。
服务器上装了MySQL但忘记密码,如何不重装找回
有用户在一台老服务器上发现装了MySQL,但完全不知道密码,最稳妥的方法就是上面说的--skip-grant-tables方式,如果你能通过SSH登录服务器,整个过程理论上只需要5分钟。
phpMyAdmin登录不了怎么办
如果你用phpMyAdmin连接MySQL报错“Access denied for user”,通常不是PHPMyAdmin的问题,而是MySQL本身的账号密码错误,可以尝试在phpMyAdmin的配置文件config.inc.php中查看$cfg['Servers'][$i]['user']和$cfg['Servers'][$i]['password'],里面可能保留了可用的凭据,很多Linux发行版安装phpMyAdmin时会自动生成一个配置文件,直接查看即可。
新买了云服务器,mysql初始化密码在哪里
简米云或酷番云的镜像市场里,很多一键部署LNMP环境或WordPress镜像,会预设一个MySQL密码,这个密码通常在镜像的说明文档中,或者在服务器的/root目录下有一个default.pass或credentials.txt文件,如果你用的是简米云,也可以查看云服务器ECS的控制台公告。
另一种情况,如果你通过yum install mysql-server方式安装MySQL,那么默认root用户使用的是socket认证方式,本地登录根本不需要密码,直接执行mysql -u root即可。
关于MySQL密码需要了解的几点常识
密码存储位置不是没密码,而是加密了
MySQL的user表结构里,authentication_string字段存放的是哈希值,MySQL 8.0默认使用caching_sha2_password插件,生成的哈希字符串以$A$005$开头,如果你试图用MD5或SHA1去解密,是行不通的,因为哈希算法不可逆。
修改密码后不需要重启数据库
很多初学者不知道,修改完密码后执行FLUSH PRIVILEGES;即可生效,没必要重启MySQL服务,只有当你修改了mysql.user表但忘记刷新时,才可能需要重启。
远程连接和本地连接是不同的账号体系
服务器上的MySQL账号分为root@localhost和root@'%'两种,很多用户改了localhost的密码,却用远程连接工具去登录,自然登录不上,排查时,要明确你是在服务器本地登录还是远程连接,两者对应的用户名和主机限制完全不同。

最佳实践:用配置文件管理密码,避免遗忘
与其每次忘记密码都折腾重置,不如在服务器上建立一个统一管理权限的机制,业内专家指出,合理的做法是使用/etc/mysql/conf.d/目录下专门存放自定义配置,并设置严格的权限:
sudo touch /etc/mysql/conf.d/credentials.cnf sudo chmod 600 /etc/mysql/conf.d/credentials.cnf sudo vim /etc/mysql/conf.d/credentials.cnf
然后在文件中写入:
[client] user=root password=你的密码 [mysqldump] user=root password=你的密码
这样你执行mysql命令时,系统会自动读取[client]段的配置,无需每次都输入用户名和密码,同时配置文件只有root用户可读,安全性有保障,如果你想用备份命令mysqldump,也直接能用,一举两得。
常见问题速查
服务器mysql默认用户名和密码是什么?
MySQL安装后的默认用户名是root,密码在安装过程中通常由你自行设定,如果使用自动化工具或一键包安装,初始密码一般在安装日志中有所记录,常见位置是/root/install.log或屏幕输出的提示信息中,如果你的系统使用的是Debian系的apt install mysql-server,安装时Debian会随机生成一个临时密码,你需要查看/etc/mysql/debian.cnf文件,其中user=debian-sys-maint的密码可以让你临时登录MySQL来修改root密码,注意这个默认密码是随机生成的,每次安装都不同,不要试图在网上搜索什么“公共默认密码”,那是不存在的。
如何查看mysql用户权限和用户名列表?
用root登录MySQL后执行:
SELECT user, host, authentication_string FROM mysql.user;
这会列出所有MySQL账号及其允许登录的主机范围,但不会有明文密码,如果你只想知道有哪些用户,这条命令已经足够,要查看某个具体用户的权限,用SHOW GRANTS FOR '用户名'@'localhost';即可。
忘记了MySQL密码,如何找回?
没有找回密码的方法,只有重置密码的方法,因为MySQL的密码是以不可逆加密形式存储的,任何声称能“逆向解密”的工具都是不可靠的,重置主要通过以下步骤完成:
- 停掉MySQL服务。
- 以
--skip-grant-tables模式启动。 - 免密登录后执行
FLUSH PRIVILEGES;。 - 用
ALTER USER或UPDATE语句重新设置密码。 - 正常重启服务。
这套流程适用于所有主流发行版,也是各大云厂商工单回复中给出的标准方案。
遇到MySQL密码问题不要着急,情况再复杂,只要服务器系统登录权限还在,MySQL密码就永远属于可控范围。
