mysql修改完密码无法再次登陆

Posted 云里有棵树

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql修改完密码无法再次登陆相关的知识,希望对你有一定的参考价值。

现象:修改完root密码之后,退出mysql,重启mysql服务,然后想用新密码登陆mysql,发现登不上去了。

一,碰到这种问题的原因是,在给用户改密码的时候没有使用password()函数对密码加密。如下:

mysql> update user set password=\'root@123\' where user=\'root\';
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3 Changed: 3 Warnings: 0

mysql> quit

# mysql -u root -p
Enter password: ********
ERROR 1045 (28000): Access denied for user \'root\'@\'localhost\' (using password: YES)

使用select查询mysql库里的user表,可以发现在user表中,密码都是以加密的形式存在的。

mysql> select * from user where user="root";

....

| localhost | root | *A00C34073A26B40AB4307650BFB9309D6BFA6999 | Y           | Y           | Y           | Y

....

如果直接指定‘set password=\'root@123\' ,mysql就会认为\'root@123\'是一个加密后的字符串,所以与这个加密字符串对应的

密码自然不是\'root@123\'了,而是另外一个位置的值。

正确的修改root密码的命令应该是

mysql> update user set password=password(\'root@123\') where user=\'root\';

二,现在知道原因了。但是我们登不上数据库,怎么办呢。解决方法如下

1,找到当前数据库进程,并将其杀死

2,进入到mysql的安装目录,进入到bin目录,执行mysqld_safe --skip-grant-tables (默认安装路径/usr/local/mysql/bin)

经过这一步,mysql服务就会以一种忽略用户权限的方式启动,就能使用mysql进行无密码登陆了。可以通过ps aux | grep mysql查看服务已经启动

3,重新打开一个控制台,再次执行\'mysql\'命令,这次可以无密码登陆了

4,使用正确的命令重新修改密码

 5,使用密码登陆,OK了

6,最好使用以下命令刷新一下系统权限(不然别人还可以无密码登陆)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

以上是关于mysql修改完密码无法再次登陆的主要内容,如果未能解决你的问题,请参考以下文章

vultr服务器mysql无法登陆求解

Centos里Mysql默认密码无法登陆

mysql 忘记密码如何修改

mysql安装登陆退出

登陆mysql服务器需要密码忘记了怎么办

mysql 5.7 怎么修改默认密码随机密码