online ddl 主备延迟
mysql的主备模式,在进行online DDL时, 主库完成ddl操作后,写入binlog日志,从库收到后会阻塞进行ddl(无法online,因为这时候主库同步过来的数据都是新表结构下的数据了),导致从库与主库产生很大的延迟。
目前业界有大概改造思路,将ddl改为start ddl 和 commit ddl,从库收到start ddl后即开始进行ddl操作,尽量与主库实现并行的DDL操作。主库完成ddl后发送commit ddl通知,从库ddl完成后等到主库的commit ddl消息后才提交
- 对于阻塞式的ddl
- 当从库先完成ddl,等待commit消息,收到后直接commit
- 当从库后完成ddl,则收到commit消息后的数据先暂停回放,等完成ddl并提交后再回放该部分数据
- 对于online ddl
- 当从库先完成ddl,收到commit消息后,要等待commit消息前的数据binlog写入完毕后才执行提交,因为这部分数据是老结构数据
- 当从库后完成ddl,收到commit之后的数据暂停回放,等ddl提交再进行回放
- 对于rockback ddl
- 可以直接丢弃ddl产生的临时文件,因为在提交之前都未被应用
