彩蛋问题:管理员root@‘locahost’ 密码丢失,怎么处理?
1.基础知识
知识点涉及到我们的客户端连接mysql服务端通过mysql服务端的连接层。
mysql服务端的连接层,经历了三个阶段
1.提供连接协议
2.验证用户信息
3.生成连接线程
我们在第二步验证用户信息的时候会加载系统授权表中的mysql.user中的用户密码信息
2.我们使用的是两个登陆连接选项,跳过验证用户信息步骤
--skip-grant-tables 启动mysql时,不加载授权表,无密码登陆。
痛点:在于所有能够连接mysql的用户都是无密码登陆,包括远程连接用户。
我们为了减低不安全性,所以引入下面这个选项拒绝远程连接用户,使用本地登陆的方式。
(连接mysql有两种方式,一种是基于tcp/ip协议的远程连接方式,一种是套接字文件的本地登陆方式)
--skip-networking 拒绝远程连接用户连接
3.实际操作流程
a. 关闭数据库实例
/etc/init.d/mysqld stop
b. 特殊模式启动
mysqld_safe --skip-grant-tables --skip-networking &
c. 登录刷新授权表
[root@db01 data]# mysql
mysql> flush privilges;
d. 改密码
mysql> alter user root@'localhost' identified by '123';
e. 重启到正常模式
[root@db01 data]# /etc/init.d/mysqld restart