作者:微信小助手
发布时间:2018-11-15T13:24:52
本文转载自公众号 打杂的ZRJ
大家当年在学MySQL的时候,为了能够迅速就业,一般是学习一下MySQL的基本语法,差不多就出山找工作了。水平稍微好一点的童鞋呢还会懂一点存储过程的编写,又或者是懂一点索引的创建和使用。但是呢,基本上大家都忽略了对底层知识的学习。为什么呢?因为工作中很少用到嘛。然后呢,市面上流传的大部分这种底层的知识,又比较偏运维,研发懂这么多意义也不是太大,很多知识可能这辈子都不会用到。
因此,我整理了一部分相关的知识,希望大家有所收获。
主要分为两个部分
binlog
的相关概念
怎么解析binlog
计划分上下两个部分来叙述。上部分讲述binlog的相关概念这部分的知识,我们不需要像运维懂的那么深,我会列举一些常见概念和常见配置,大家匆匆扫一眼,有个概念即可。这样大家以后和运维讨论问题的时候,也不会一脸的懵逼。正所谓
懵逼树上懵逼果,懵逼树下你和我。
懵逼树前排排坐,一人一个懵逼果。
博主一个人默默的把懵逼果收走独享就好,各位读者还是懂点基本概念,以后方便和运维沟通。下半部分讲怎么解析binlog。
另外,这篇文章是给研发大大看的,可能有些概念我理解的也不对,请运维大大轻喷。
记得我的"一个定义,两个误解,三个用途,四个常识"
先从定义开始讲起
binlog是记录所有数据库表结构变更(例如CREATE、ALTER TABLE…)以及表数据修改(INSERT、UPDATE、DELETE…)的二进制日志。
binlog不会记录SELECT和SHOW这类操作,因为这类操作对数据本身并没有修改,但你可以通过查询通用日志来查看MySQL执行过的所有语句。
多说一句,如果update
操作没有造成数据变化,也是会记入binlog
。
误解一:binlog只是一类记录操作内容的日志文件
因为binlog
称之为二进制日志,很多研发会把这个二进制日志和我们平时在代码里写的代码日志联系在一起。因为我们的代码日志,只有一类记录操作容的文件,并不包含索引文件。然而,这个二进制日志包括两类文件:
索引文件(文件名后缀为.index)用于记录哪些日志文件正在被使用
日志文件(文件名后缀为.00000*)记录数据库所有的DDL和DML(除了数据查询语句)语句事件。
这么说可能还有一点抽象,假设文件my.cnf
中有这么三条配置