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

  • 相关阅读:
    mysql中的内置函数
    python之旅九【第九篇】socket
    docker的安装,升级,与删除(最新版)
    consul与docker的使用
    python之旅第八篇--异常
    python的图形模块PIL小记
    python之旅七【第七篇】面向对象之类成员
    python之旅六【第七篇】面向对象
    zabbix上监控docker
    zabbix在ubuntu16.04上的安装
  • 原文地址:https://www.cnblogs.com/billyxp/p/3675811.html
Copyright © 2020-2023  润新知