数据库配置: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