设为首页 加入收藏

TOP

MySQL 5.6 主从复制如何处理――触发器,函数,存储过程,调度事件(二)
2015-11-21 01:32:49 来源: 作者: 【 】 浏览:1
Tags:MySQL 5.6 主从 复制 如何 处理 触发器 函数 存储 过程 调度 事件
2.从服务器上的event
如果在从服务器,开启事件.不仅主服务器复制过来的SQL语句执行一遍,从服务器上的EVENT也会执行.
?
===============分割线=============
?
总结:
?
MySQL5.6文档的说明和上面转帖的博文,说的是不太相符的。不相符的地方在 存储过程的说明上。我们还是应该以文档为准。博文毕竟良莠不齐。
?
在基于row的复制时:
?
不管是 存储过程,函数,还是触发器,都是将 执行之后的数据行,传给slave。slave上看到的都是数据,不会有它们的调用语句。slave上可以没有它们的定义。
?
在基于statement 的复制时:
?
1)存储过程、函数、触发器 都会在slave上执行。所以基于statement复制时,slave也必须有它们的定义。而且存储过程、函数必须是确定性的或者它们不修改表的数据。不然就会导致基于statement的复制,主从数据不一致。
?
2)存储过程和函数在定义时,有 确定性函数和非确定性函数的分别;比如 uuid(),md5()这些函数肯定都是非确定性函数,因为它们每次执行的值是不确定的。所以在master和slave上分别执行会导致数据不一致。所以在基于语句复制的环境中,函数都必须是 确定性的(DETERMINISTIC)。不然就只能采用row复制格式了。
?
3)在基于statement复制时,trigger中定义的sql语句在执行时,不会传给slave,而仅仅传调用trigger的语句本身。所以不会导致定义在trigger中的sql执行两次。也就是说不会既将调用trigger的语句传给slave,又将在trigger执行时,在trigger中运行的那些sql语句传给slave. 因为这样会导致那些 sql 执行两次。
?
4)上面存储过程、函数、触发器在复制时的区别,也说明了,基于row格式的复制要优于基于statement格式的复制,基于row的复制明显要健壮很多。
?
同时也说明:触发器、存储过程能不用最好就不要用了。
?
5)最后,虽然有文档的说明,实际使用时最好先通过自己的测试,来确认一下,到底 存储过程、函数、触发器是在基于statement的复制中是如何处理的。
?
基于row的复制,很定是没有问题的。最好是采用基于row的复制,最好不用触发器,存储过程,非确定性函数。
首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇MySQL实战课程---通过录像手把手.. 下一篇数据库Schema的优化

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: