mysql敲命令,有历史的日志,还有就是错误日志和默认的错误信息,事务日志,
通用日志,是mysql发送各种指令的信息
慢查询日志,默认情况下,系统是不会提供的
可以查找出系统总拖慢系统的一些日志,可以找到到底哪条sql比较慢,为了将来优化系统
查看是否开启
下面的是如果慢查询启用起来,用的文件
现在还没有启用,磁盘上是没有这个文件的
查看官网,如何启用
支持session级别,支持 动态设置
现在还没有对应的信息
怎么来触发慢查询
默认是10秒钟触发慢查询
sleep,就是每条记录都是停1秒,查看是否能记录下来
show processlist 也可以查看这条命令正在执行,效率低就经常出现
在生产中经常用show processlist ,经常出现的命令,可能就是不干活效率差的
查看慢查询日志文件
filter过滤的意思
查看官问描述
数据类型是枚举
逗号分隔的字符串,包含对于过滤的设置,这些将记录在慢查询里,如果慢查询匹配其中任何一个条件,并且超出
查询时长,将会记录在慢查询
换句话说,只有特定的操作才会记录在慢查询当中
如果不适用索引。或使用全索引,或者不限制扫描行数
将记录在慢查询里(不论你花了多少时间)
有时候行过多,利用索引是效率比较低的
像下面s开头,如果name上有索引就应用了索引
现在name字段上没有索引
现在创建一个索引
确实利用索引来查询了
但是这样的效率并不是很高,像x开头下面的就没有使用索引
mysql在查询数据的时候会自动选择最优的路径,对于当前搜索来讲利用索引是一种方式,不用也是一种搜索方式
综合来讲利用索引还不如不利用索引,所以就选择不利于索引
有索引为什么不用,因为返回记录的结果太多了,因为利用索引需要一层层往下走,你利用一层层往下走,不如扫描整表25条记录来得快
如果不适用索引。或使用全索引,或者不限制扫描行数
将记录在慢查询里(不论你花了多少时间)
如果你认为只要涉及到全表扫描就是效率低的
默认情况下不记录
支持全局动态修改
另一个终端退出生效
在慢查询里目前只有两条记录
现在这个查询只能全表扫描
记录下来了
这个可以开启,因为关注一下,有些语句不用索引扫描,不超过10秒,加了索引可能效率更高
记录的详细程度
通过慢查询,现在就可以优化一下数据库的访问,进而得知哪些是速度比较慢的语句
还有一个用来监控数据库性能方面的工具,profile
默认是off的,可以用这个工具来查看系统运行的整个过程,每条命令花了多长时间,还有每个步骤
还可以观察到哪个阶段是比较慢的,每个字句花多长时间都可以看到的
看来这个工具支持session级别
执行存储过程
也记录下来了这个存储过程,因为符合条件
不开启事务日志的情况下,start transaction 下执行和直接执行好像效率不一样
因为前面的命令每执行一条insert命令都是一个事务,每个都要提交
后面的是直击追加到事务日志,最后再提交,效率更高
‘
id是从这开始的’
总共执行0。07秒,前面是查询id,为什么这个命令是比较慢的,可以通过
这样就是查询了当前语句整个的过程。发现发送数据最慢
再执行一次存储过程
查看编号,不过这个命令是拆开的insert语句
试试这个语句,这个是对大的sql语句非常有效
查看对应编号,和消耗的时间
可以分析出一些复杂的sql语句在哪个阶段比较浪费时间
上面的工具ppt没写,需要记一下,可以分析出一些复杂的sql语句中哪些会比较慢的
二进制日志与存储引擎无关,一旦启用,它会把你对数据库的所有更改操作记录在二进制日志里,记录的是什么,就是数据库发生更改的命令比如update,insert,delete,将来可以在二进制日志里看到命令,与事务日志是不一样的
事务日志是,对数据库进行一些修改操作的时候,是否是把数据库完整的记录在事务日志里呢,实事上并不是,事务进行更改,如果你没提交,数据库文件也会变得很大
比如这个文件
删除这个数据,数据库文件也不会马上变小
这里面记录的是数据库文件的修改而不是操作命令
整理下就变小了
事务日志记录的是,其中的磁盘上的这个文件,就死磁盘上数据发生的情况,并不是把每条命令的修改放到事务日志里,是两码事,这个记录的是一些数据库文件的变化信息,而不是update之类的命令
而二进制日志是记录的sql 语句
就可以看到对数据库的增删改操作,如果你要重复执行,只要拿出来就可以了
只有提交了才会放到二进制日志里
事务日志记录的不一定是提交的,正在修改的,即使没有提交也会记录在事务日志里
应该是事务日志先记录,后面在记录二进制日志,因为提交了才会往二进制写
再生产中强烈建议把二进制日志打开
oracle 微档存档功能,默认不启用
sqlserver 默认不启用
mysql
都有类似的功能
加入周日做好备份
周一有人把一张重要的表删除了,没人管
直到周二有人发现
事务日志不能解决,都覆盖了
但是恢复到周日的,空间的时间又过得太久
这时候就可以用二进制日志还原
二进制记录了每个sql语句的位置,并且还有时间标记
先用周日备份还原
把二进制日志(记录当前周日到周二,导出来,看到一大堆sql语句,找到delete表的内容,找到以后,把它从sql语句中删除,删除以后,留下的就是正常操作的语句了)
现在就用sql语句重定向一下就可以了
理论上是这样,中间还有许多问题的(因为还原需要停服务,服务有时候是停不了的)
delete还好点
就怕update,性别全部是gender
就怕update,性别全部是gender=M,你找到这个语句,删除是 删除,但是就怕后面操作是依赖于性别
有些公司是不能停止访问 的,只能错上加错了
二进制日志的内容
第一种就是sql语句
影响的条数
还有一种就是把这个行一条条记录下来,拆分成100条
一条条数据不容易出问题,
比如下面数据在不同时间段执行,造成的情况就不一样
now函数更是如此
生产中建议用行的方式取到数据
还有一种方式是2者混合的,系统自动判断,记录的 日志不会太大也不会太小
这个变量就是记录的你的日志格式到底是什么格式
最少的语句格式,并不是很合理,虽然借阅空间,但是容易丢数据
索引文件就是记录有几个日志文件,分别叫什么
、启用或禁用二进制日志变量的语句
这个1是默认的,设置成0
默认值1相当于已经启用了,支持session级别,可以动态随时更改的
实事上启用不启用二进制日志,这只是其中一个设置,还有一个需要
log_bin,也决定了是否启用二进制日志
默认是不启用
所以在sql里,现在是不启用二进制日志的
二进制日志也i放在这个文件夹里
不支持动态修改,只能写到文件里
这上面写的是boolean值,其实是文件路径
也可以指定放在路径下,只要前缀就可以了,后缀会自动加上去
写on会有错误
会出现下面的情况
所以不要写ON,不写任何就是默认启动这个功能
生成的文件默认路径就在mariadb下
数据库文件坏了不担心,二进制文件坏了才要命
数据库文件坏了有备份,而二进制文件坏了中间那段数据等于都丢了
相对来讲二进制文件有时候更重要,甚至比数据库文件更重要
制定一个路径
删除data、下之前生成的文件
二进制文件一把非常占空间,建议找大一点的 硬盘
index文件记录有几个二进制文件
如果现在对数据库进行更改,那么二进制日志将会记录数据
现在盯着看
现在对数据库进行更新
发生了变化
默认对数据库更改,二进制记录的是语句型的
进行一个delete语句,二进制日志继续变大
没有变大,因为数据库二进制文件是基于命令的
虽然删的多,但是记录的 只有一条命令
修改成关于每行的记录格式
再执行一次
换了个文件了
由于是基于行的,删除一个试试
涨了一些,但是没有涨那么多
必须借助工具才能查看里面的二进制文件
每个二进制文件最大能多大
第一个文件到1G,就转换到第二个文件,只要你不删除,就一直保留的
重启服务好像自动就生成一个新文件
如果每天进行备份,中间的二进制文件就可以删除,但是也需要预留一段时间
保守15天以上
所以就可以设置默认删除日志的时间,免去忘了删除,造成硬盘空间满了
这个值,进行什么操作就变大
突然硬盘快满不想记日志了,可以把二进制临时性的关闭
但是这个不支持动态改
但是可以动态设置变量off
再去执行不变大了
写日志什么时候写到日志里
系统写磁盘不是理解写磁盘而是先写到buffer里,在系统比较闲的时候,才会把书写到磁盘 里
1是立即写,只要发生了就立即写磁盘,好处是丢不了东西
如果不立即写,中间停电了就等于丢失数据