数据库配置:binlog_format = row
在主库执行了以下语句导致延迟
create table t2 as select t1
update t2 set column1=value where column2=value2
binlog的,对于binlog_format=row的数据库,binlog里面记录的是每行数据的更改,也就是说,当执行一个更新语句时,语句更新了N行,就会在日志中存在N行记录。binlog中的每一条记录进行应用,也就是说,主库上的一条更新语句=从库上的N条更新语句在这个问题中,使用create table t2 as select t1复制了表t1的数据到t2中,但是,使用这个语句复制的表t2,是不包括t1的索引信息的,也就是说,后续更新t2时,是在一个无索引的大表中执行更新,在从库上要执行多次全表扫描来更新数据,所以最终导致的从库同步延迟
将
create table t2 as select t1
替换为
create table t2 like t1
insert into t2 select * from t1
使用这种方法,也能够创建一个和表t1内容相同的表,并且t2会复制t1的索引信息
MySQL create table t2 as select t1 导致的主从同步延迟问题
原文:https://blog.51cto.com/u_13540167/2722316