mysql基础原理_MySQL 基础原理概述

一、连接 MySQL

1、客户端(PHP、Java、Pyhton、C++、Navicat 等)连接MySQL 都是通过MySQL 提供的api 。

2、客户端会携带参数请求 MySQL 提供的api

3、MySQL api(对外连接通道)会进行权限校验和安全校验

4、校验通过后,会在MySQL连接池 创建连接(长连接、短链接)。

注:有几个程序在连接,连接池内就会创建多少个线程,另外值得注意的是,MySQL 是有一个最大连接数限制的,当然该参数是可以设置的。

SHOW VARIABLES LIKE'%max_conn%';

ca669067ad2705dd2c41885d6d5aa1f1.png

可以通过命令 SHOW FULL PROCESSLIST; 查看当前连接池内的所有连接

注:如果连接数已经达到设置的最大连接数设置,MySQL 会主动销毁掉状态为 sleep 的连接。

二、连接之后的大概流程

5、分析器

对查询语句进行语法分析和词法分析,判断 SQL 语法是否正确,如果查询语法错误会直接返回给客户端错误信息,如果语法正确则进入优化器

6、优化器

对查询语句进行优化处理,例如一个表里面有多个索引,优化器会判别哪个索引性能更好。

注:在这一步,会对每一个已经创建的索引进行分析,这也是如果一个表创建的索引过多也不好的原因。

7、执行器

8、返回结果

注:如果开启了查询缓存,则在分析器之前还有一步验证查询缓存的操作,如果查询缓存有数据,则直接返回。但是目前查询缓存已经基本没人用了,缓存一般都用 Redis 了。

三、MySQL 的日志文件

1、错误日志

服务器启动和关闭过程中的信息(未必是错误信息,如mysql如何启动InnoDB的表空间文件的、如何初始化自己的存储引擎的等等)、

服务器运行过程中的错误信息、事件调度器运行一个事件时产生的信息、在从服务器上启动服务器进程时产生的-信息

# 查看错误日志的设置

showglobalvariables like'%log_error%';

2、二进制日志(binlog)

二进制日志,也就是我们常说的binlog。

二进制日志记录了MySQL所有修改数据库的操作,然后以二进制的形式记录日志在日志文件中,其中还包括每条语句所执行的时间和消耗的资源,以及相关的事务信息。

# 查看二进制日志的相关设置

showglobalvariables like'%log_bin%';

(3)事务日志【indodb引擎独有】

redo.log (重做日志,ib_logfile0):重做的不是事务,而是事务执行之后的数据提交

undo.log(回滚日志 ibdata1):回滚执行失败的事务,或回滚执行事务过程中,还没有提交,MySQL就挂掉的情况

(4)慢查询日志(Slow Query Log)

顾名思义,慢查询日志中记录的是执行时间较长的query,也就是我们常说的slowquery。

(5)查询日志( Query Log,一般不用,了解就好)

记录所有的查询sql

四、MySQL 的数据文件

MySQL数据库会在data目录下面建立一个以数据库名为名称的文件夹,用来存储数据库中的表文件数据。

不同的存储引擎,表的文件扩展名也不一样,例如:MyISAM 存储引擎用“.MYD”作为扩展名,Innodb 存储引擎用“.ibd”,Archive 用“.arc”,CSV 用“.csv

注:有一个特殊的文件扩展名,叫做.frm,该文件使用任何存储引擎都会有它,它记录的是数据表结构。

1、Myisam

.myd:存储myisam 表的表数据

.myi:存储myisam 表的索引数据

2、innodb

.ibd:存储innodb表的数据+索引(独享空间,默认就是独享空间)

ibdata:存储innodb表的数据(当设置为共享空间时,数据和索引会记录在这里)

五、事务的执行流程1、开启事务2、写日志文件(重做日志和回滚操作)

重做日志:记录的就是执行的sql

回滚日志:记录的是与执行的sql完全相反的sql

3、提交事务

4、写日志到重做日志,标识这条事务执行的没有问题,并将数据刷到磁盘中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值