Mysql5.7的初始密码忘记后的更改

今日在初始化mysql,在执行下面的命令时,系统没有提示我初始化的密码,导致在bin/mysql --user=root -p 时不知道输入什么密码。

bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/u01/mysql
[root@qht131 mysql]# mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

网上查了一下,可以用以下方法解决:

一、停止mysqld服务

二、编辑配置文件

有的Linux版本是/etc/my.cnf

有的Linux版本是/etc/mysql/mysql.conf.d/mysqld.cnf

在配置文件中添加skip-grant-tables

Mysql5.7的初始密码忘记后的更改_第1张图片

三、启动mysqld服务

四、执行mysql

进入后台了。

五、修改root密码并刷新配置

注意,user表没有“password”字段了,取代的是“authentication_string”。

mysql> update user set authentication_string=password('123456') where User='root' and Host='localhost';
Query OK, 1 row affected, 1 warning (0.05 sec)
Rows matched: 1  Changed: 1  Warnings: 1

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

六、再次执行mysql命令需要密码了。

七、去掉skip-grant-tables配置项

因为这一配置项的意思是“跳过权限表的限制,不用密码验证,直接登录”,在生产环境中是绝对不行的。

所以一定别忘记删除这个配置。

八、在配置文件中删除skip-grant-tables后,第一次登入数据库会提示你更改密码,否则其它的命令都不会执行

[root@qht131 mysql]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.7.21-log

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use mysql
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

mysql> set PASSWORD=PASSWORD('123456');
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> use mysql;
Database changed

至此,密码修改成功!

你可能感兴趣的:(MYSQL)