忘记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权限系统。
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语句。
2)、关闭mysqld服务进程。
3)、使用mysqld_safe启动mysqld;
以上两种方法是在忘记root密码情况下重新设置密码的方法,可以发现都需要重启mysqld服务。很多人都是使用第一种进行重置root密码,但是比较推荐的做法反而是第二种,即安全有快捷简单。
3、不重启的mysqld的方法
忘记了root密码,不能重启mysqld,如何重置root密码?
从上面两种方法可以看到,mysql的用户账号和密码存储在mysql.user表中。
误区:mysql数据中的表都是innodb存储引擎的,而实际上绝大多数表示是以myisam作为存储引擎。
另一方面,mysqld可以处理linuxjishu/14078.html target=_blank class=infotextkey>kill命令发送的信号,如sighup、sigterm。需要注意mac osx会忽略sighup和sigquit信号。
sighup信号产生的行为类似于flush命令,你可能想到了些什么,flush privileges?
开始重置root密码。
1、首先,要有一个可以拥有修改权限的mysql数据库账号,当前的mysql实例账号(较低权限的账号,比如可以修改test数据库)或其他相同版本实例的账号。
把data/mysql目录下面的user表相关的文件复制到data/test目录下。
2、使用另一个较低权限的账号链接数据库,设置test数据库中的user存储的密码数据。
3、把修改后的user.myd和user.myi复制到mysql目录下,记得备份之前的文件。
4、发送sighup信号,重新加载权限表。
然后,就可以用新root密码访问mysql数据库了。