2019/04/18二进制日志管理

本文探讨MySQL的各种日志类型,包括慢查询日志、事务日志、二进制日志等,及其对数据库性能的影响。讲解如何通过慢查询日志优化SQL语句,以及二进制日志在数据恢复中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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是立即写,只要发生了就立即写磁盘,好处是丢不了东西
如果不立即写,中间停电了就等于丢失数据

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值