视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
trigger、procedure和event如何同步_MySQL
2020-11-09 19:28:20 责编:小采
文档


最近遇到一个需求涉及存储过程,被突然问题到如何同步问题问到了,赶紧补课学习一下。

首先,先看一下trigger、procedure和event的定义都是什么?

trigger: 触发器是一个被指定关联到一个表的数据对象,当对个表的特别事件出现时,它被激活。

procedure:是一组为了完成特定功能的SQL语句集。

event:定时任务,类似Linux的crontab。

其次,mysql的同步中可以设定不同的binlog_format,包括statment、row和mix。

statment:语句级,记录原始SQL语句。

row:行级,记录受到影响的行的真实修改情况。

mix:上面两种的混合,基础使用语句级,当会导致数据不一致的时候会采用行格式。

最后,分别在statement和row两种格式下,看看trigger、procedure和event是如何记录binlog的。

1、statement+trigger

  binlog会把create trigger记录下来,并推给slave,然后记录正常的sql语句,不会记录trigger中的任何sql。

2、row+trigger

  binlog会把create trigger记录下来,然后会将正常的sql和trigger的sql的所有执行结果记录下来,并推送给slave。

3、statement+procedure

  binlog中会把create procedure记录下来,然后不会记录call语句,而是将procedu中的sql用语句级记录下来,推送给slave。

4、row+procedure

  binlog会将create procedure记录下来,然后不会记录call procedure,而是会把所有执行的记过记录在binlog中,然后推送给slave。

5、statement+event

  binlog会将create event记录下来,并会将event中的操作记录成语句级,推送给slave。

6、row+event

  binlog会将create event记录下来,并将event中的所有操作按照行格式记录下来,推送给slave。

这期间的问题:

1、由于create都是语句级的,从库会自动更改binlog_format。

2、从库如果binlog_format是statement但是主库是row的话,同步会报错,需要将从库也改成row才会恢复。

以上这2点很容易造成同步中断,故不建议在mysql中使用以上3种设置,如果要用最好使用statement格式。

下载本文
显示全文
专题