Mysql root 账号如何重置密码

Mysql root 账号如何重置密码,第1张

今日分享主题:mysql root账号如何重置密码

前两天发现我的 mysql 数据库突然无法登录,但是上周还使用得是正常的,经过一番查找还是没有找到问题的原因。

DBA 给我的解释:我怀疑主机重启后,某些文件(user.*)就丢了,不知道啥原因。我记得之前你也是重启后遇到过相同问题。

既然这样,只好重置 root 账号密码了。具体 *** 作步骤如下

Step1:停止 mysql 服务

命令:systemctl stop mysqld #停掉MySQL

命令:systemctl status mysqld #查看状态

Step2:修改/etc/my.cnf配置,添加 skip_grant_tables=1 启动设置,注意要在[mysqld]行所在的下面添加。

Step3:重启 mysql 并查看状态

systemctl start mysqld

systemctl status mysqld

Step4:使用 mysql 命令连接到 mysql 服务器,重新设置root密码

use mysql #进入mysql数据库 select * from user#查询user表 查看是否有root账号,如果没有就需要 *** 作如下insert into 语句:

如果 user 表里面有 root 账号,则直接可以重置密码。

命令如下:update user set authentication_string=password('test123') where user='root'

FLUSH PRIVILEGES#刷新授权列表

再输入 exit 退出mysql

Step5:将步骤2中/etc/my.cnf 文件中添加的 skip_grant_tables=1 启动设置去掉,再执行一个systemctl restart mysql 命令重启 mysql 服务。

Step6:使用重置后的密码再登录时问题解决。

1.修改MySQL的登录设置:

# vim /etc/my.cnf

在[ mysqld ]的段中加上一句: skip-grant-tables

例如:

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

skip-grant-tables

保存并且退出vi。

2.重新启动mysqld

# service mysqld restart

Stopping MySQL: [ OK ]

Starting MySQL: [ OK ]

3.登录并修改MySQL的root密码

# mysql

Welcome to the MySQL monitor. Commands end with or \g.

Your MySQL connection id is 3 to server version: 3.23.56

Type 'help' or '\h' for help. Type '\c' to clear the buffer.

mysql> USE mysql

Database changed

mysql> UPDATE user SET Password = password ( 'new-password' ) WHERE User = 'root'

Query OK, 0 rows affected (0.00 sec)

Rows matched: 2 Changed: 0 Warnings: 0

mysql> flush privileges

Query OK, 0 rows affected (0.01 sec)

mysql> quit

4.将MySQL的登录设置修改回来

# vim /etc/my.cnf

将刚才在[mysqld]的段中加上的skip-grant-tables删除

保存并且退出vim

5.重新启动mysqld

# service mysqld restart

Stopping MySQL: [ OK ]

Starting MySQL: [ OK ]

安装好mysql后,找到 /var/log 目录,打开 mysqld.log 文件,找到有password的地方,可以看到root账户的密码

cat /var/log/mysqld.log | grep password

使用该密码,可以登录root账户

命令行都要以管理员运行

1:net stop mysql停止mysql服务

2:mysqld --console --skip-grant-tables --shared-memory启动MySQL服务的时候跳过权限表认证

3:由于上面的命令行被mysql的服务给占用,我们得重新开启一个新的命令行

4:在新开的命令行中执行mysql

5:update user set authentication_string = '' where user='root'将root用户的密码清空

6:quit 退出,然后在之前的命令行将我们开启的mysql服务停止掉(Ctrl+C或者关闭命令行),然后执行net start mysql 重新启动mysql服务

7:在我们之后开启的命令行中输入mysql -uroot -p 然后按enter键,输入密码继续按enter键(这里密码已经被清空),

8:ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码' 修改密码

9:退出后,使用新密码登录

注意的地方,网上有些给的是使用update命令在第五步直接修改密码为我们重置的密码,然后使用flush privileges命令刷新权限再退出,重启mysql服务,然后使用我们重置的密码重新登陆。然而你会发现登录会提示密码不正确,

下面是使用update命令将密码修改为root

登录报错,说明使用update直接修改密码是不可以的。我们也可以从上面看到update保存的密码是明文

使用alter命令修改后的密码是加密的

update 方法保存的为明文是由于没有使用password()方法,而password()方法在mysql5.7.6版本后已经废弃了,所以必须alter命令去修改密码了。

如果在第5步直接使用alter命令去修改密码也是不可以的,会报错

说是在免鉴权的情况下不支持这个 *** 作

所以我们必须先清空密码,然后再使用alter命令修改密码

ps:mysql5.7.6版本后 废弃user表中 password字段 和 password()方法,所以旧方法重置密码对mysql8.0版本是行不通的,共勉

希望能帮助你,还请及时采纳谢谢


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/6108890.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-15
下一篇 2023-03-15

发表评论

登录后才能评论

评论列表(0条)

保存