为了演示,找个测试环境来操作,千万不要线上这么搞 pkill mysqld 关闭掉mysql

跳过MySQL的权限表启动MySQL服务: --skip-grant-tables启动mysql

/usr/local/mysql8013/bin/mysqld_safe --defaults-file=/data/mysql8/my8.cnf --skip-grant-tables & 

将密码置空:

root@localhost [(none)]>update mysql.user set authentication_string='' where user="root" and host="localhost";
Query OK, 1 row affected (0.06 sec)
Rows matched: 1  Changed: 1  Warnings: 0

root@localhost [(none)]>

pkill mysqld 关闭掉mysql

再次启动mysql服务

[root@localhost ~]# /usr/local/mysql8013/bin/mysqld --defaults-file=/data/mysql8/my8.cnf &

无密码登录MySQL服务并设置新的密码:


root@localhost [(none)]>select version();
+-----------+
| version() |
+-----------+
| 8.0.13    |
+-----------+
root@localhost [(none)]>alter user user() identified by 'jist558@wei';

[root@localhost ~]# mysql -uroot -p'jist558@wei' -e "select version();" mysql: [Warning] Using a password on the command line interface can be insecure. +-----------+ | version() | +-----------+ | 8.0.13 | +-----------+

密码写入.my.cnf文件就可以mysql直接登录mysql窗口:

[root@localhost ~]# cat .my.cnf 
[mysql]
prompt="\u@\h:\p \R:\m:\s[\d]>"
no-auto-rehash
user=root
password=jist558@wei
[root@localhost ~]# mysql -e "select version();"
+-----------+
| version() |
+-----------+
| 8.0.13    |
+-----------+

演示完毕