当前位置:首页 > 问答 > 正文

mysql密码忘了咋整?教你几招简单找回数据库密码的方法

哎,MySQL密码忘了这事儿,别说新手了,老司机偶尔也会阴沟里翻船,别慌,这绝对不是世界末日,网上有很多热心网友分享过解决方法,比如知乎上就有不少高赞回答,CSDN上更是有详细的步骤教程,下面我就把这些方法给你捋一捋,总有一招能帮你把门敲开。

核心思路就两条:要么绕过密码验证进去改密码,要么直接“暴力”修改密码文件。

第一招:万能钥匙——跳过权限验证(最常用)

这个方法就像是你把锁给拆了,先进屋再说,根据CSDN博客上大量教程的说明,这个方法适用于你还能登录服务器的情况。

mysql密码忘了咋整?教你几招简单找回数据库密码的方法

步骤是这样的:

  1. 关掉MySQL服务: 你得让MySQL停下来,方法因操作系统而异。

    • 如果你是Windows系统: 在“服务”里找到MySQL,右键点击“停止”,或者用管理员身份打开命令提示符(CMD),输入 net stop mysql(注意,这里的mysql是你的服务名,有时可能是mysql57mysql80,去服务里看清楚)。
    • 如果你是Linux系统: 打开终端,通常是用 sudo systemctl stop mysqlsudo service mysql stop
  2. 创建一个“后门”启动脚本: 这是关键一步,我们需要告诉MySQL:“这次启动,不用检查密码了。”根据多个技术社区的文章,比如知乎用户提到的,我们需要创建一个特殊的启动命令。

    mysql密码忘了咋整?教你几招简单找回数据库密码的方法

    • Windows系统: 还是用管理员身份的CMD,切换到你的MySQL的bin目录下,cd C:\Program Files\MySQL\MySQL Server 8.0\bin,然后输入:
      mysqld --skip-grant-tables
    • Linux系统: 在终端里输入:
      sudo mysqld_safe --skip-grant-tables &

      输入这行命令后,命令行可能会看起来卡住了,这是正常的,说明MySQL已经在“无密码模式”下运行了。

  3. 无密码登录并修改密码: 新开一个命令提示符或终端窗口(原来的那个别关!)。

    • 同样进入到MySQL的bin目录(Windows)或直接使用mysql命令(Linux)。
    • 输入 mysql -u root -p,当它问你密码时,直接按回车键,因为现在已经跳过验证了,你就能直接以root身份进去。 进去后,你会看到提示符变成了 mysql>,现在就可以修改密码了,但这里有个小坑,不同版本的MySQL修改密码的命令不太一样,这也是很多CSDN教程里会重点强调的。
    • 对于MySQL 5.7及更早版本:
      UPDATE mysql.user SET authentication_string=PASSWORD('你的新密码') WHERE User='root';
    • 对于MySQL 8.0及更新版本: 密码管理方式变了,需要用下面这个:
      ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';

      输完命令后,一定要执行 FLUSH PRIVILEGES; 来刷新权限,让新密码生效。

      mysql密码忘了咋整?教你几招简单找回数据库密码的方法

  4. 重启MySQL服务: 密码改好了,就得把“后门”关掉,回到第一个命令行窗口,按 Ctrl+C 停止MySQL,然后像第一步那样,正常地启动MySQL服务(net start mysqlsudo systemctl start mysql),你就可以用刚设的新密码登录了。

第二招:如果第一招不灵,或者你连mysql命令都找不到——修改初始化文件

这个方法在知乎的一些回答里被作为备选方案提到,原理是MySQL启动时会读取一个叫my.cnf(Linux)或my.ini(Windows)的配置文件,我们可以在这里面做手脚。

  1. 找到这个配置文件,Windows通常在MySQL的安装目录下,Linux在 /etc/mysql//etc/ 下。
  2. [mysqld] 这个段落下面,加一行:
    skip-grant-tables
  3. 保存文件,然后正常重启MySQL服务,这样效果和第一招里的“后门”启动是一样的。
  4. 接着重复第一招里的第3步,无密码登录并修改密码。
  5. 非常重要的一步: 密码修改成功后,一定要回到这个配置文件,把刚才加的 skip-grant-tables 这一行删掉或者用 注释掉(写成 #skip-grant-tables),然后再重启一次MySQL服务,否则你的数据库就一直处于无密码状态,太危险了!

第三招:实在没办法的“重装大法”(不推荐,但得知道)

有些论坛网友会说,如果上面两招都失败了,或者你的数据库是全新安装的、里面没什么重要数据,那最彻底的办法就是卸载重装,但这绝对是下下策,因为你会丢失所有数据,除非你确定数据库是空的,或者你有最近的备份,否则千万别轻易尝试。

最后的小贴士(来自大家的经验)

  • 记不住命令? 没关系,这些命令确实有点长,你可以先把这篇文章收藏起来,用到的时候照着敲就行。
  • 注意版本差异: 就像前面说的,改密码的命令在MySQL 5.7和8.0之间不一样,这是最容易出错的地方,如果你不确定自己的版本,可以试试8.0的命令,如果报错再换5.7的。
  • 改完密码还是登录不上? 检查一下是不是有空格输错了,或者用户主机名不对(比如是root@%而不是root@localhost),可以在mysql命令符下用 SELECT user, host FROM mysql.user; 查看一下准确的root用户信息。
  • 养成好习惯: 密码找回后,赶紧找个安全的地方把新密码记下来,或者考虑使用密码管理器。

希望这几招能帮你顺利解决问题!操作前如果特别担心,可以先给整个虚拟机或服务器做个快照,这样就算操作失误也能一键还原。