Mysql 忘记root密码的解决方法
skip-grant-tables
顾名思义,数据库启动的时候 跳跃权限表的限制,不用验证密码,直接登录。
注意:
这种情况只有在忘记root密码 不得已重启数据库的情况下使用的。现网环境慎用,需要重启数据库,并且安全性也比较难以保证。
1.修改配置参数
/etc/my.cnf
在[mysqld] 下面加上:
skip-grant-tables
配置项。
2.重启mysql
使得参数生效:
service mysqld restart
3.注意事项
此时所有用户登录当前数据库都是免密码的,所以此时数据库的安全性是非常低的。
4.修改密码
或者:grant all privileges on *.* to 'root'@'%' identified by 'root123' with grant option;
5.去掉参数
a.密码修改好了之后再将配置文件中 skip-grant-tables去掉或注释掉
b.再次重启数据库。
顾名思义,数据库启动的时候 跳跃权限表的限制,不用验证密码,直接登录。
注意:
这种情况只有在忘记root密码 不得已重启数据库的情况下使用的。现网环境慎用,需要重启数据库,并且安全性也比较难以保证。
1.修改配置参数
/etc/my.cnf
在[mysqld] 下面加上:
skip-grant-tables
配置项。
2.重启mysql
使得参数生效:
service mysqld restart
3.注意事项
此时所有用户登录当前数据库都是免密码的,所以此时数据库的安全性是非常低的。
4.修改密码
- 执行mysql命令进入mysql命令行
#mysql - 修改root用户密码
MySQL> UPDATE mysql.user SET authentication_string=PASSWORD("newpdaaa") where USER="root";
MySQL> flush privileges;
MySQL> exit;
注意:正常情况下修改用户密码的语句是
UPDATE mysql.user SET password=PASSWORD("newpdaaa") where USER="root";
因为我们跳过了权限,mysql数据库下已经没有password这个字段了,password字段需要改成authentication_string,否则会报错。
ERROR 1054 (42S22): Unknown column 'password' in 'field list'
或者:grant all privileges on *.* to 'root'@'%' identified by 'root123' with grant option;
说明:此命令是为密码为 root 、IP(%)任意的 root 用户授权。(%:模糊查询,所有 IP 都可以,,可指定其他主机 IP;BY 后的 'root123' 为密码)
5.去掉参数
a.密码修改好了之后再将配置文件中 skip-grant-tables去掉或注释掉
b.再次重启数据库。