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

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

trigger、procedure和event如何同步的更多相关文章

  1. trigger()的event事件对象之坑

    问题引入,先贴一段有问题的代码,如果你对 trigger()  这个函数了解不透彻,还真看不出这段代码错在哪.完成的功能是样式转换器,想让页面在加载后自行触发点击事件隐藏三个按钮,但是效果如图并没有隐 ...

  2. 同步对象(同步条件Event)

    event = threading.Event()   #创建同步对象 event.wait()     #同步对象等待状态 event.set() #同步对象设置Trueevent.clear()  ...

  3. 多线程模块的同步机制event对象

    多线程模块的同步机制event对象 线程的核心特征就是他们能够以非确定的方式(即何时开始执行,何时被打断,何时恢复完全由操作系统来调度管理,这是用户和程序员无法确定的)独立执行的,如果程序中有其他线程 ...

  4. JAVA通过Gearman实现MySQL到Redis的数据同步(异步复制)

    MySQL到Redis数据复制方案 无论MySQL还是Redis,自身都带有数据同步的机制,像比较常用的 MySQL的Master/Slave模式 ,就是由Slave端分析Master的binlog来 ...

  5. canal+mysql+kafka实时数据同步安装、配置

    canal+mysql+kafka安装配置 概述 简介 canal译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费. 基于日志增量订阅和消费的业务包括 数 ...

  6. SQLServer数据实时同步PostgreSQL

    SQLServer数据实时同步至PostgreSQL 前言: 为迎合工作需求有时候传送的数据保存在SQLServer中但由于工作需要需要保存到PostgreSQL中进行处理,本文主要通过在SQLSer ...

  7. SAP CRM 使用Javascript触发SAP Server Event

    原文地址:How To Trigger SAP Server Event With Javascript 本文地址:http://www.cnblogs.com/hhelibeb/p/5977921. ...

  8. Yii2的深入学习--yii\base\Event 类

    根据之前一篇文章,我们知道 Yii2 的事件分两类,一是类级别的事件,二是实例级别的事件.类级别的事件是基于 yii\base\Event 实现,实例级别的事件是基于 yii\base\Compone ...

  9. 深入理解jQuery的Event机制

    jQuery的Event模块非常强大.其功能远远比原生事件监听器强大许多,对同一个元素的监听只用一个eventListener,内部则是一个强大的观察者,根据匹配事件类型触发相应回调.jQuery不仅 ...

随机推荐

  1. 基于消逝时间量的共识机制(POET)

    来自于Intel project:Hyperledger Sawtooth,目前版本 PoET 1.0 PoET 其实是属于Nakamoto consenus的一种,利用“可信执行环境”来提高当前解决 ...

  2. linux安装python3(已有python2.x情况下)

    参考:https://www.cnblogs.com/Guido-admirers/p/6259410.html 1.官网下载python3 cd /home/download wget https: ...

  3. Animate.css 前端动画开发教程

    1.首先下载animate.css文件: 2.打开动画预览地址选择想要的动画,地址:https://daneden.github.io/animate.css/  ,选择好后记住动画的名字在你下载的a ...

  4. Python_oldboy_自动化运维之路_全栈考试(五)

    1.执行 Python 脚本的两种方式 [root@localhost tmp]# cat a.py #!/usr/bin/python # -*- coding: UTF-8 -*- print & ...

  5. Linux学习笔记:mv移动或文件重命名

    mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录. 语法:mv 源文件 目标文件 视mv命令中 ...

  6. oracle数据库11g(11.2.0.1)安装报错:提示ins_ctx.mk编译错误。

    https://blog.csdn.net/weixin_42967330/article/details/81668404

  7. mongo 运维管理学习

    1 如何在线修改chunk大小 https://docs.mongodb.com/manual/tutorial/modify-chunk-size-in-sharded-cluster/ 2 chu ...

  8. Deepin Linux安装MySQL方法

    sudo apt-get install mysql-server apt-get install mysql-client sudo apt-get install libmysqlclient-d ...

  9. java.lang.ClassNotFoundException: net.sf.ezmorph.Morpher

    java.lang.ClassNotFoundException: net.sf.ezmorph.Morpher 出现以上异常,可能是使用Json缺少ezmorph包: 以下是Json常用的包:ezm ...

  10. python脚本获取本机公网ip

    1.获取公网IP地址方式,访问:http://txt.go.sohu.com/ip/soip 2.python脚本实现: #!/usr/bin/python # -*- coding:utf8 -*- ...