• 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格式。

  • 相关阅读:
    报错信息
    交通
    安装Charles代理
    安装Phabricator
    缓存更新问题
    最好的学习资料在官网
    mysql安装
    git使用
    vbox的centos系统挂载win共享目录做web目录www用户权限问题
    一句话解决windows下quick-cocos2d-x中player3打开黑屏问题
  • 原文地址:https://www.cnblogs.com/billyxp/p/3675811.html
Copyright © 2020-2023  润新知