忘记mysql密码
MySQL下创建新用户、新数据库、设定访问权限控制都需要用到root密码。万一把root密码忘了,该怎么办?
安全模式重置法
基本的思路是,以安全模式启动mysql,这样不需要密码可以直接以root身份登录,然后重设密码。
先,我们停掉MySQL服务:sudo service mysql stop
以上命令适用于Ubuntu和Debian。CentOS、Fedora和RHEL下使用mysqld替换mysql。
以安全模式启动MySQL:sudo mysqld_safe --skip-grant-tables --skip-networking &
注意我们加了--skip-networking
,避免远程无密码登录 MySQL。
这样我们就可以直接用root登录,无需密码:mysql -u root
接下来重设密码:
1 | mysql> use mysql; |
flush privileges;
是刷新权限
注意,命令后需要加分号。
重设完毕后,退出mysql > quit
然后重启 MySQL 服务:service mysql restart
同样,以上命令适用于Ubuntu和Debian,Centos、Fedora和RHEL需要用mysqld
替换mysql
。
现在可以尝试用新密码登录了:mysql -u root -p
再提示输入密码就可以了
修改MySQL的登录设置
这是在centos下的vim /etc/my.cnf
在[mysqld]的段中加上一句:skip-grant-tables
例如:
1 | [mysqld] |
保存并且退出(ESC后输入:wq
,表示保存并退出)。
重新启动mysqld:service mysqld restart
登录并修改MySQL的root密码mysql -u root
接下来重设密码:
1 | mysql> use mysql; |
退出
记得将MySQL的登录设置修改回来
将刚才在[mysqld]的段中加上的skip-grant-tables
删除
保存并且退出
重启MySql:service mysqld restart
这里有个坑:由于mysql版本不同,可能user表的字段也是不相同的,比如在5.7版本中,验证密码字段不是叫password
而是 authentication_string
,在修改密码的时候就需要修改字段了。