当前位置: 首页 > news >正文

全面理解Mysql架构

全面理解Mysql架构

mysql官方文档:https://dev.mysql.com/doc/refman/8.0/en/installing.html

安装Mysql

  1. Centos7中安装Mysql

  2. 通过Docker安装Mysql

在Docker中运行的Mysql与实体机中相比,虽说性能上略有不如,不过却可以很方便地帮我们拉起一个集群。

mkdir -p /home/mysql8/data /home/mysql8/config  /home/mysql8/logsdocker run  -d  \
--name mysql8 \
--privileged=true \
--restart=always \
-p 3310:3306 \
-v /home/mysql8/data:/var/lib/mysql \
-v /home/mysql8/config:/etc/mysql/conf.d  \
-v /home/mysql8/logs:/logs \
-e MYSQL_ROOT_PASSWORD=123456 \
-e TZ=Asia/Shanghai mysql:8.0.27 \
--lower_case_table_names=1  

全面理解Mysql架构

安装Mysql

  1. Centos7中安装Mysql

  2. 通过Docker安装Mysql

在Docker中运行的Mysql与实体机中相比,虽说性能上略有不如,不过却可以很方便地帮我们拉起一个集群。

mkdir -p /home/mysql8/data /home/mysql8/config  /home/mysql8/logsdocker run  -d  \
--name mysql8 \
--privileged=true \
--restart=always \
-p 3310:3306 \
-v /home/mysql8/data:/var/lib/mysql \
-v /home/mysql8/config:/etc/mysql/conf.d  \
-v /home/mysql8/logs:/logs \
-e MYSQL_ROOT_PASSWORD=123456 \
-e TZ=Asia/Shanghai mysql:8.0.27 \
--lower_case_table_names=1  

了解mysql的架构

mysql架构图

mysql的查询与更新流程

Mysql主要由连接器、分析器、优化器、执行器,以及存储引擎组成

  1. 当客户端一个连接请求过来时,首先由连接器校验该用户是否有建立连接的权限(如mysql -uroot -p
  2. 分析器:分析编写的sql是否符合规则(验证表执行权限)
    1. 词法分析:information_schema表中记录了表字段信息,检测出操作的字段是否存在(1054 - Unknown column 'NAME' in 'field list'
    2. 语法分析:sql语法不对,会提示错误大概的位置near by(You have an error in your SQL syntax
  3. 优化器:在一个查询语句的查询方案中选出最优解,如表连接中小表驱动大表
  4. 执行器:最终去执行sql语句。需要验证执行权限

为什么表的执行权限在分析器中已经验证过了,到了执行器中又重复验证一边呢?
因为由触发器、存储过程等附带的表,只有到执行的时候才知道有没有权限

5.查询缓存:之前查询过一次的sql会放在查询缓存中,命中率太低,且影响并发,所以在mysql8中已经废除了

更新语句的流程:update T set c=c+1 where ID=2;

与上面的查询流程大差不差,主要区别就在:通过分析器确定是更新语句、通过优化器确定通过ID来更新记录、最终由执行器更新数据

Redolog与Binlog的二阶段提交(内部XA)

redolog与binlog用来保证mysql崩溃后的数据恢复,其中redolog是Innodb特有的,binlog是数据mysql的server层。

执行一条更新语句:

  1. 首先拿到记录并更新,
  2. 写入内存
  3. 写入到redolog(此时redolog的状态是prepare,还没有正式写入redolog日志文件)
  4. 写入binlog
  5. 提交事务,此时redolog的状态为commit

redolog与binlog写入流程

若是binlog更新完,还没来得及commit,数据库突然崩溃,重启mysql之后能够恢复嘛?

可以的,重启之后发现redolog是prepare状态,则回去检查binlog的数据是否完整。若binlog数据完整则直接提交,否则回滚数据

http://www.sczhlp.com/news/49954/

相关文章:

  • 南充网站建设公司哪里可以学网站开发
  • 做cg的网站重庆广告网站推广
  • xwiki做的网站个人网站做淘宝客违规
  • 佛山网站建设专业公司如何编辑网站标题
  • 第七章 手写数字识别
  • 《岁月深处的光》
  • Java Netty实现ws入门
  • 基于米尔瑞芯微RK3576开发板的Qwen2-VL-3B模型NPU多模态部署评测
  • 网上做兼职正规网站有哪些沧州分销系统制作
  • a站播放量最高的视频广告公司年终总结
  • 北京南站到北京西站wordpress插件woo
  • 吧台 东莞网站建设wordpress聊天轻系统
  • 九江市网站建设自己怎么做系统网站
  • 外贸网站电子建设wordpress搜资料
  • 阿里巴巴网站维护怎么做零元创业加盟网
  • 电商关键词一般用哪些工具专业seo网站优化公司
  • 陕西网站建设的目的东莞网站建设设计价格
  • 重庆平台网站建设宁波模板建站定制
  • mysql数据库升级
  • 车牌号寓意分析与评分类
  • softmax和交叉熵的配合求导
  • 一键重装系统reinstall
  • DRF 认证
  • 杭州制造业企业做网站2021世界500强企业排名
  • 网站 mysql数据库 字符seo 重庆
  • 刷推广链接的网站网站备案 公章
  • 天津做网站费用中国工商网
  • 婚礼工作室网站模板网页设计dw代码大全
  • .net程序员网站开发工程师主要给人家做网站的公司
  • 网站开发的简易步骤合肥专业手机网站哪家好