linux mysql忘记root密码的解决方法(直接修改root密码方法)

最近测试环境要迁移到另一组服务器上,之前的数据库、代码等都要迁移。
mysql数据库被迁移到了新服务器后,迁移人员换了mysql密码,竟然没有告诉我们(甚至不知道应该找哪个人要密码);因此自己想了个办法,总算是能用旧密码登录了。

反正是测试服务器,领导都说随便搞了,所以没问题(还好不用删了mysql重装)。

Mysql是5.7.26版本的,网上的教程有的旧了,本文亲测可用。

直接修改root密码详细流程:

1.登录linux服务器,可以使用sudo的账号即可。

2.执行命令,修改mysql配置文件:

sudo vi /etc/my.cnf

打开后,找到[mysqld]中的#skip-grant-tables,然后把注释打开,大概在这个位置:

port = 3306
default_password_lifetime = 0
skip-grant-tables

然后wq保存并退出

3.执行命令,重启mysql,已经是安全模式了

sudo service mysql stop
sudo service mysql start

4.启动后,使用root用户进入mysql,如果提示输入密码,直接按回车即可(安全模式不需要密码,可以直接进)

mysql -u root -p

5.切换到名叫mysql的数据库,然后执行update命令,修改root的密码,如下;
注意,5.7.26版Mysql的密码字段不叫password,而是叫authentication_string:

use mysql
update user set authentication_string=password('#123456@') where user='root';
//刷新系统权限表
flush privileges;

这段代码将密码改为#123456@,password的意思是加密成密码串。

注意,安全模式下,下方修改用户密码的语句无法使用,会报错:

 alter user root identified by '#123456@';

6.如果想让外部也能用这个账号密码登陆,那就把user表中的host字段改为%(root的host默认是localhost,表示只能在本机登陆)

update user set host='%' where user='root123';

一般还是insert个host为%的用户好一些。

7.现在root用户的密码就修改完毕了,再次改回my.cnf文件,注释skip-grant-tables:

port = 3306
default_password_lifetime = 0
#skip-grant-tables

然后重启mysql,大功告成:

sudo service mysql stop
sudo service mysql start

总结:

1.mysql的账号密码都存储在mysql.user中,mysql是数据库名,user是表名;表中有3个字段常用,user字段是用户名,authentication_string是加密后的密码,host是允许登录的ip。
2.user表中的密码字段是authentication_string,而不是password。(5.7.26版Mysql)
3.如果想在外部用账号密码访问mysql,可以在user表中新增一行,host设置为%,user设置为用户名,authentication_string是加密后的密码,其它字段参考其它行即可。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追逐梦想永不停

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值