MySQL 8.0 以上版本重置 root 用户密码的终极办法

1. 在 /etc/my.cnf 文件末尾追加 skip-grant-tables

 [root@abdefg mysql]# vim /etc/my.cnf
 [mysql]
 # 设置mysql客户端默认字符集
 default-character-set=utf8mb4 
 
 [mysqld]
 # 设置3306端口
 port = 3306 
 # 设置mysql的安装目录
 basedir=/usr/local/mysql
 # 设置mysql数据库的数据的存放目录
 datadir=/usr/local/mysql/data
 # 允许最大连接数
 max_connections=200
 # 服务端默认编码(数据库级别)
 character-set-server=utf8mb4
 # 创建新表时将使用的默认存储引擎
 default-storage-engine=INNODB 
 lower_case_table_names=1
 max_allowed_packet=16M
skip
-grant-tables

2.重启MySQL服务

service mysqld restart

3.免密码登录 root 用户(输入密码时直接回车即可)

[root@abdefg bin]# mysql -uroot -p
 Enter password: 
 Welcome to the MySQL monitor.  Commands end with ; or g.
 Your MySQL connection id is 8
 Server version: 8.0.13 MySQL Community Server - GPL
 
 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>

4.重置密码

mysql> use mysql
mysql> select host, user, authentication_string, plugin from user;

注意:先执行flush privileges;然后会alter成功,要不然会alter失败

mysql> alter user 'root'@'localhost'IDENTIFIED BY 'newpassword';

5. 修改密码安全级别

set global validate_password.policy=0;
set global validate_password.length=1;

6. 把/etc/my.cnf 文件末尾的 skip-grant-tables 去掉,重启MySQL服务,修改完成。

原文地址:https://www.cnblogs.com/mschen/p/11511578.html