1、Mysql C/S 结构介绍 ***
2、Mysql 实例的构成 ***
公司:老板 + 经理 + 员工 + 办公区
实例:mysqld + master thread + 干活的Thread + 预分配的内存
Mysql 中 Mysqld服务器进程结构
3.1、SQL语句引入
结构化的查询语言
DQL 数据查询语言
DDL 数据定义语言
DML 数据操作语言
DCL 数据控制语言
select user,host from mysql.user;
一条语句如何在mysql 中运行的:
mysqld 程序结构:
3.2 连接层
提供连接协议(TCPIP,Socket)
验证用户名、密码、IP、端口等合法性
自动开启专用 连接线程(接受语句,返回结果)
将语句交给下一层
show processlist; 查看当前有多少会话,查看我们连接线程。
默认最多可以连 151 个会话。
如果 这个 会话,8个小时没有动作的话,将会退出。
3.3 SQL层 (在mysql 5.7开始,严格执行sql_mode)
接收连接层提交来的语句
语法检查和SQL_MODE (SQL标准规范)
语义检查,就是,到底是个什么(dql,dcl,dml,ddl)命令,然后再是,权限检查
预处理:
解析语句:生成多种执行计划树,(好比,看书,要看102章节,可以翻目录,可以一页一页的翻)通过优化器算法,按执行代价(cpu IO Mem的消耗),评估成本。(以前按执行的时间来评估),优化器会选择 它 觉得最优的执行方法,交给语句执行器。
语句执行器,真正运行SQL语句
提供了查询缓存,默认不开启
日志记录(审计日志,通用日志,二进制日志),默认也没开启。
3.4、存储引擎层(mysql 的内置FS)
根据SQL层的执行结果,去磁盘上找到相应16进制的数据。
再次返回SQL层,结构化成二维表的方式。
再由连接层线程,最终展现出来。
++++++++++++++++++++++++++++++
3.5、Mysql的逻辑存储结构
库 ----------> 相当于Linux 中的一个目录
create database wordpress charset utf8mb4; ------->mkdir /wordpress
show databases; --------> ls /
use wordpress; ------->cd /wordpress
表 ----------->Linux 中的文件
列(字段) 无
列属性 无
数据行(记录) ------------->Linux 数据行
表属性 ------------->Linux 文件属性
3.6、Mysql 物理存储结构,就是 库 在磁盘上如何存储的。
库: 使用FS(操作系统)上的目录来表示
表:(两种引擎,其实就是两种不同的文件系统格式)
MyISAM(存储引擎)相当于ext2
user.frm :存储的表结构(列,列属性)
user.MYD:存储的数据记录
user.MYI:存储索引
InnoDB(相当于XFS)
time_zone.frm:存储的表结构(列,列属性)
time_zone.ibd:存储的数据记录和索引
ibdata1 :数据字典信息
InnoDB的存储引擎,除了上面两个表,还有一个ibdata1 用来存储元数据(数据字典)
从mysql 5.6 已经开始逐步淘汰MyISAM了。
+++++++++++++++++++ InnoDB 段 区页
文件系统:
mysql---> ibd文件(存储的数据记录和索引)--->一个页16k,默认连续分配64个页,1M
为了连续使用,提供1M,只针对数据行,
数据行存储:每次默认分配 64 个连续的页(16K),也就是1M,我们把它称之为1个区
Mysql 的表根据存储需求,会由多个区构成,我们又把表称之为一个段。
innode ,段 区 页
一般情况下(非分区表),普通的Innodb 表
段:一个表就是一个段。一个段由多个区构成。
区:一个区由连续的64个页组成。1M
页:16K
+++++++++++++++++
用户和权限管理
作用:登录mysql,管理mysql
用户的定义:用户名@'白名单'
用户的操作:
最标准的,先创建用户,再授权。
8.0以前的版本可以,可以自动创建用户并授权。
grant all on *.* to oldguo@'10.0.0.%' identified by 'abc';
8.0开始,必须先创建用户,再授权。
create user oldboy@'10.0.0.%' identified by '123';
修改密码:
alter user abc@'10.0.0.%' identified by '123456';
删除用户:
drop user abc@'10.0.0.%';
+++++++++++++++++ 权限管理
8.0 以前是按命令(select,delete,update等)来授权
8.0 加入了角色,一个角色多个权限,再授权角色。
+++++++++++ 权限列表
ALL----相当于下面所有权限
with grant option 给别人授权的权限,只有本地的管理员具备。只能写到授权命令末尾。
授权命令:
grant 权限 on 作用目标 to 用户 identified by '密码';
grant all on *.* to oldguo@'10.0.0.%' identified by 'abc';
作用目标:*.* 所有
wordpress.* 一个数据库的所有表
wordpress.t1 表级别权限,只对wordpress数据库的t1表授权。
授权需求:
1、创建一个管理员用户,可以通过10.0.0.网段,管理数据库
grant all on *.* to root@'10.0.0.%' identified by 'abc' with grant option;
2、创建一个应用用户,可以通过10.0.0网段,wordpress 库下的所有表进行增删改查。
grant select,update,insert,delete on wordpress.* to wordpress@'10.0.0.%' identified by 'abc';
应用用户,一般就是 ,增删改查,不需要更大的权限。也可以把删除权限去掉
查询权限:
show grants for wordpress@'10.0.0.%';
回收用户权限:
revoke 权限 on 那个数据库 from 那个用户;
revoke delete on wordpress.* from wordpress@'10.0.0.%';
面试题:关于生产中开用户:
如何沟通开用户
1、是否有邮件批复
2、对那些库和表做操作
3、做什么操作
4、从什么地址登录数据库
面试题:开发人员找你要root用户密码?给还是不给,如何拒绝?
答案是:
第一种:拒绝他,走流程。
第二种:如果是金融类的公司
原则上是不允许任何非DBA人员持有或申请root
如果有人私人索要root密码,即使举报。