• 技术文章 >数据库 >mysql教程

    trigger、procedure和event如何同步_MySQL

    2016-06-01 13:08:32原创647
    最近遇到一个需求涉及存储过程,被突然问题到如何同步问题问到了,赶紧补课学习一下。

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

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:
    上一篇:MySQL管理与优化(6)_MySQL 下一篇:Mysql在字符串类型的日期上加上10分钟并和现在的日期做比较_MySQL
    php培训_php实战培训【立即报名】-php中文网第20期

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• mysql的安装路径怎么查看• 怎么让mysql不区分大小写• sql与mysql有什么区别• mysql存储过程中的循环语句有哪些• 一起来聊聊数据库拉链表
    1/1

    PHP中文网