zoukankan      html  css  js  c++  java
  • trigger、procedure和event如何同步

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

    首先,先看一下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格式。

  • 相关阅读:
    Google Maps 尝鲜
    ASDoc 的一些参数
    一本比较简单易懂的中文python入门教程
    word2010 2007中如何去掉首页页码
    转贴:关于出现java.lang.UnsupportedClassVersionError 错误的原因
    Windows下搭建SVN傻瓜式教程
    Red Hat中jdk1.6.0_03 tomcat6.0.35将hudson.war放入webapp后启动tomcat报错X connection to localhost:11.0 broken
    使用alternatives切换red hat linux的jdk版本
    linux安装ant 1.8.2
    反编译插件jadclips
  • 原文地址:https://www.cnblogs.com/billyxp/p/3675811.html
Copyright © 2011-2022 走看看