MySQL学习记录(三)-mysql如何执行SQL

MySQL内部组件

mysql内部主要分成两个部分,Server层和存储引擎层(Store层),我们使用的innerDB就是一种存储引擎,Server层是不变得Store是可以改变的。

Server层

Server层主要包括连接器、分析器、优化器、执行器、查询缓存等,我们平时工作中使用的大部分功能都是在Server层处理的。

连接器

连接器是用于建立连接使用,因为我们使用的客户端有非常多种,所有客户端的通信都必须先和连接器建立连接。一个连接如果长时间没有发送指令到Server层,则默认会在8个小时断开连接,这个默认时间可以设置wait_timeout设置。

查询缓存

一条SQL在执行前,会优先去查询一下mysql的缓存,mysql的查询缓存是将查询语句作为key,查询出来的值作为value存储的。一般不会使用查询缓存,因为缓存失效非常频繁,命中缓存率十分低,一般只会在对一些长期不变的数据才会使用缓存,例如数据字典。可以通过设置query_cache_type的值来控制是否开启缓存,0代表关闭、1代表开启、2代表有SQL_CACHE时才会使用缓存,使用缓存SQL如下:
select SQL_CACHE * from table
mysql8.0移除了查询缓存功能

分析器

一条SQL开始执行查询第一步会先做“词法分析”,mysql会识别出SQL语句中的关键字,分析器会告诉mysql这些关键字是什么含义。
第二步会做“语法分析”,用于判断你的这条SQL是否满足mysql的语法。

优化器

当你的表里面有多个索引的时候,优化器会决定使用哪个索引。如果使用了join,left join等关联查询时,优化器也会判断哪个表先查询,总体来说优化器会对你的SQL语句进行优化,它决定了你的SQL将如何执行。

执行器

执行器会调用你的存储引擎执行对应的SQL。

bin-log日志

除了上面说的几个组件以外,server还有一个重要的功能,bin-log日志,bin-log日志会记录我们对数据库的操作。
bin-log日志可以帮我们找到误删的数据库,需要使用bin-log日志需要先开启该功能,配置my.cnf文件

#配置binlog目录
log-bin=/xxx/xxx/xxx
#5.7以上版本需要配置 server-id=xxxx
#表示每次执行写入就与硬盘同步,为0则表示由系统决定什么时候写入硬盘
sync-binlog=1
#binlog现在支持三种类型statement、row、mixed
binlog-format=ROW
#statement 记录的是当先执行的数据。
#row 记录的是执行后的结果。(建议使用)
#mixed 两种方式的综合体。

binlog命令

#查看bin-log是否开启
show variables like '%log_bin%';
#查看最后一个bin-log日志信息
show master status;
#新开一个log-bin日志
flush logs;
#清空bin-log日志
reset master

#数据库恢复
/usr/local/mysql/bin/mysqlbinlog --no-defaults /xxx/xxx/xxx(文件地址)|mysql -uroot -p (数据库名)
#恢复指定位置数据
/usr/local/mysql/bin/mysqlbinlog ‐‐no‐defaults ‐‐start‐position="xxx"(开始位置) ‐‐stop‐position="xxx"(结束位置) /xxx/xxx/xxx(文件地址)|mysql ‐uroot ‐p (数据库名)
#恢复指定时间段数据
/usr/local/mysql/bin/mysqlbinlog ‐‐no‐defaults --stop‐date="xxxx-xx-xx xx:xx:xx"(结束时间) --start‐date="xxxx-xx-xx xx:xx:xx"(开始时间)|mysql ‐uroot ‐p (数据库名)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值