mysql密码忘记如何重置root密码

很久没有玩数据库,果然又忘了mysql的root密码,一顿操作重置,啪啪啪一堆报错,记录一下。说明: mysql密码重置其实是修改数据库mysql下的user表中密码字段。
但是没有密码连接都连不上咋个整?

一、启动安全+免验证模式

①关闭服务:

sudo service mysql stop

②安全模式+免验证启动服务

sudo /usr/bin/mysqld_safe --skip-grant-tables

如果顺利启动成功,那么可以调到第二步了。
当然我并不顺利,在这里遇到了报错:

mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.

这里写图片描述
“/var/run/mysqld” 这个目录不存在?这个目录是干什么的?具体不详知,只知道在程序启动中会向这个目录读写一些东西。
解决方法:创建目录并修改权限。

sudo mkdir /var/run/mysqld
sudo chmod 777 /var/run/mysqld

再执行②启动mysql,启动成功~
这里写图片描述

二、连接服务器,修改密码

第一步执行成功后,就可以免验证连接服务器了。
①新开一个终端,连接服务器:

mysql -u root

用show databases; 查看数据库,发现服务器中会有好几个数据库:
这里写图片描述
在开头说过mysql的密码其实是保存在名为“mysql”的数据库中,所以切换到mysql数据库。
②切换到mysql数据库:

use mysql;

③修改密码
这里要根据版本来执行不同的SQL语句了,因为版本不同,存储密码的字段可能不相同。5.7以前的版本可以用以下语句更新root密码:

update user set password = password('123456') where user='root';

如果顺利的话,root的密码应该已经被修改为“123456”,那可以不必往下看了。
然而我的mysql版本是5.7.21,所以第一次尝试的时候这里又报错了:

ERROR 1054 (42S22): Unknown column 'password' in 'field list'

这里写图片描述
表中没有password字段,可以用desc user;指令看一下果然没有。
查资料发得知5.7版本密码保存字段已经改成上图中的“authentication_string”了,于是重新输入update指令重置密码:

update user set authentication_string = password('123456') where user='root';

这里写图片描述
修改成功!

三、重启mysql服务并连接

先杀死第一步中启动的进程,命令行Ctrl + Z 并不能杀死进程。
先查看进程:

ps -a | grep mysql

这里写图片描述
使用kill -9 pid 杀死进程,然后启动mysql服务即可。

sudo service mysql restart
mysql -u root -p

这里写图片描述
结束。

  • 11
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值