这里需要说明,后来由于多线程复制方案的引入,sql_thread演化成为了多个线程,跟我们今天
要介绍的原理没有直接关系,暂且不展开。
分析完了这个长连接的逻辑,我们再来看一个问题:binlog里面到底是什么内容,为什么备库拿
过去可以直接执行。
binlogbinlog的三种格式对比的三种格式对比
我在第15篇答疑文章中,和你提到过binlog有两种格式,一种是statement,一种是row。可能你
在其他资料上还会看到有第三种格式,叫作mixed,其实它就是前两种格式的混合。
为了便于描述binlog的这三种格式间的区别,我创建了一个表,并初始化几行数据。
如果要在表中删除一行数据的话,我们来看看这个delete语句的binlog是怎么记录的。
注意,下面这个语句包含注释,如果你用MySQL客户端来做这个实验的话,要记得加-c参数,否
则客户端会自动去掉注释。
当binlog_format=statement时,binlog里面记录的就是SQL语句的原文。你可以用
mysql> CREATE TABLE `t` (
`id` int(11) NOT NULL,
`a` int(11) DEFAULT NULL,
`t_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `a` (`a`),
KEY `t_modified`(`t_modified`)
) ENGINE=InnoDB;
insert into t values(1,1,'2018-11-13');
insert into t values(2,2,'2018-11-12');
insert into t values(3,3,'2018-11-11');
insert into t values(4,4,'2018-11-10');
insert into t values(5,5,'2018-11-09');