mysql忘记root密码怎么重置?mysql找回root密码的方法

发布时间:2021-01-18编辑:脚本学堂
本文介绍了mysql忘记root密码如何找回的方法,教你如何重置mysql root用户密码,需要的朋友参考下。

忘记mysql的root密码,怎么重新设置一个root密码?

如何不重启mysqld,且没有权限修改用户账号和权限的情况下,如何重新设置root密码?

几种重置root密码的方法。
1、skip-grant-tables
使用skip-grant-tables选项,mysqld server启动之后并不使用权限系统(privilege system)。
用户不需要任何账号、不受任何限制的访问数据库中所有数据。
为了安全起见,通常加上skip-networking,mysqld不侦听任何tcp/ip连接请求。

操作过程如下,
1)、修改my.cnf配置文件,在mysqld选项中添加skip-grant-tables和skip-networking。
2)、再重启mysqld server。
3)、通过sql语句修改mysql.user表中存储密码。执行flush privileges,重新启用mysql权限系统。
 

update mysql.user set password=password(‘mynewpass')where user='root'; 
flush privileges;

4)、删除或注释配置文件中skip-grant-tables和skip-networking的参数选项。如果使用skip-networking,则需要再次重启mysqld。
因为skip-networking不是系统变量,只是mysqld的参数选项,而不能通过系统变量动态进行设置。
如果没有适用skip-networking,只需要执行flush privileges就可以使权限系统重新生效。

2、–init-file
mysqld_safe可以使–init-file参数选项来执行重新设定密码的sql语句。
1)、新建一个初始化文件,如/tmp/initfile,文件内容为上面修改密码的sql语句。
 

update mysql.user set password=password('mynewpass') where user='root';
flush privileges;

2)、关闭mysqld服务进程。
3)、使用mysqld_safe启动mysqld;
 

mysqld_safe --init-file=/home/me/mysql-init &

以上两种方法是在忘记root密码情况下重新设置密码的方法,可以发现都需要重启mysqld服务。很多人都是使用第一种进行重置root密码,但是比较推荐的做法反而是第二种,即安全有快捷简单。

3、不重启的mysqld的方法
忘记了root密码,不能重启mysqld,如何重置root密码?
从上面两种方法可以看到,mysql的用户账号和密码存储在mysql.user表中。

误区:mysql数据中的表都是innodb存储引擎的,而实际上绝大多数表示是以myisam作为存储引擎。
 

select count(*), engine from information_schema.tables  where table_schema='mysql' group by engine;
+----------+--------+
| count(*) | engine |
+----------+--------+
|        2 | csv    |
|       22 | myisam |
+----------+--------+
 

另一方面,mysqld可以处理linuxjishu/14078.html target=_blank class=infotextkey>kill命令发送的信号,如sighup、sigterm。需要注意mac osx会忽略sighup和sigquit信号。
 

sigterm causes the server to shut down.
sighup causes the server to reload the grant tables and to flush tables, logs, the thread cache, and the host cache. these actions are like various forms of the flush statement. the server also writes a status report to the error log


sighup信号产生的行为类似于flush命令,你可能想到了些什么,flush privileges?

开始重置root密码。
1、首先,要有一个可以拥有修改权限的mysql数据库账号,当前的mysql实例账号(较低权限的账号,比如可以修改test数据库)或其他相同版本实例的账号。
把data/mysql目录下面的user表相关的文件复制到data/test目录下。
 

cp mysql/user.* test/
chmod g+w test/user.* #或者chown mysql.mysql test/user.*

2、使用另一个较低权限的账号链接数据库,设置test数据库中的user存储的密码数据。
 

mysql -usylar -p
use test
update user set password=password('mynewpass') where user=‘root';

3、把修改后的user.myd和user.myi复制到mysql目录下,记得备份之前的文件。
 

mv mysql/user.myd mysql/user.myd.bak
mv mysql/user.myi mysql/user.myi.bak
cp test/user.my* mysql/

4、发送sighup信号,重新加载权限表。
 

ps aux | grep mysqld
kill -sighup 5830 (pid of mysqld)

然后,就可以用新root密码访问mysql数据库了。