MySQL 5.6 主从复制如何处理——触发器,函数,存储过程,调度事件





Syntax:
CREATE
[DEFINER = { user | CURRENT_USER }]
TRIGGER trigger_name
trigger_time trigger_event
ON tbl_name FOR EACH ROW
trigger_body trigger_time: { BEFORE | AFTER } trigger_event: { INSERT | UPDATE | DELETE }
1)trigger 只能在表中的数据进行: insert, update, delete 时进行某种处理,也就是说他不能对表上的 DDL 语句进行某种处理!!!!
2)MySQL triggers activate only for changes made to tables by SQL statements. They do not activate for changes in views, nor by changes to tables made by APIs that do not transmit SQL statements to the MySQL Server. 通过视图修改和通过API修改的表的数据时,不会触发trigger
MySQL5.5 主从复制 (触发器,函数,存储引擎,事件处理)说明
mysql5.5 对触发器,函数,存储引擎,事件进行主从复制情况.
一、MySQL主从复制有三种模式.
1.binlog_format = row : 日志中会记录成每一行数据被修改的形式(记录页面),然后在 slave 端再对相同的数据进行修改。
2.binlog_format = statement : 每一条会修改数据的 SQL 都会记录到 master 的 bin-log 中。slave 在复制的时候 SQL 进程会解析成和原来 master 端执行过的相同的 SQL 再次执行。
3.binlog_format = mixed : 这个模式是在5.1.8版本之后, 才有的. mixed是row和statement的混合模式.
二、触发器的主从复制.
A .当binlog_format = statement 或 binlog_format = mixed (使用混合模式用的是statement 方式) 这种模式下复制情况
1. 主从复制的时候,主从触发器都受到definer从句的约束.只有主从上都有这个用户才能正常运行这个触发器.
2. 主服务器上SQL语句传到从服务器上,从服务器再执行SQL语句去触发从服务器的触发器(这里要说明是:主服务器不会把触发后的SQL传递给从服务器).

这里可以看到,传递是原始的SQL语句.
B .当binlog_format = row 或 binlog_format = mixed(使用混合模式用的是row方式) 这种模式下复制情况
1. 主服务器把被修改的页面复制给从服务器,并且这个修改的页面的值是触发后的改变值.
2. 因为这个页面的值是触发后改变的值, 所以在从服务器上可以不需要这个触发器.
3. 删除从服务器上的触发器.一样的可以得到跟主服务器一样的值.

三、存储过程的主从复制
1. 主服务器上的存储过程同样收到definer从句的约束.但是,在复制的时候,从服务上不需要有存储过程
A. 当binlog_format = statement 或binlog_format = mixed (使用混合模式用的是statement 方式) 这种模式下复制情况

可以看到通过系统函数转换后的值复制给从服务器,不需要在从服务器上建立。(注:其实这里是错误的!和文档中的明显不一致,参见最后的总结。)
B .当binlog_format = row 或 binlog_format = mixed(使用混合模式用的是row方式) 这种模式下复制情况(传的都是数据)

四、函数主从复制
A . 当binlog_format = statement 或binlog_format = mixed (使用混合模式用的是statement 方式) 这种模式下复制情况
1. 主从复制的时候,主从触发器都受到definer从句的约束.只有主从上都有这个用户才能正常运行这个函数
2. 主服务器上SQL语句复制从服务器上,从服务器再执行SQL语句再去调用从服务器的函数(主服务器不会把函数的返回值传给从服务器的)

B. 当binlog_format = row 或 binlog_format = mixed(使用混合模式用的是row方式) 这种模式下复制情况(传的都是数据)
1.主服务器会直接把修改过的页面复制给从服务器,从服务器不需要有对应的函数

五、事件主从复制
当事件有用函数,触发器,存储过程时.跟上面的操作情况是一样的.
但有一点不同的是.
在主服务器上建立一个event,当然,在从服务器上也会创建一个event..(默认情况下主event复制到从服务器的event是关闭着的)
1.主服务器上的event

2.从服务器上的event

如果在从服务器,开启事件.不仅主服务器复制过来的SQL语句执行一遍,从服务器上的EVENT也会执行.
(events 没有必要迁移到slave上,默认disable也是正确的。因为master上执行的events也会通过sql或者数据复制到slave上。)
2)存储过程和函数在定义时,有 确定性函数和非确定性函数的分别;比如 uuid(),now()这些函数肯定都是非确定性函数,因为它们每次执行的值是不确定的。所以在master和slave上分别执行会导致数据不一致。所以在基于语句复制的环境中,函数都必须是 确定性的(DETERMINISTIC)。不然就只能采用row复制格式了。
3)在基于statement复制时,trigger中定义的sql语句在执行时,不会传给slave,而仅仅传调用trigger的语句本身。所以不会导致定义在trigger中的sql执行两次。也就是说不会既将调用trigger的语句传给slave,又将在trigger执行时,在trigger中运行的那些sql语句传给slave. 因为这样会导致那些 sql 执行两次。
MySQL 5.6 主从复制如何处理——触发器,函数,存储过程,调度事件的更多相关文章
- mysql5.5 对触发器,函数,存储引擎,事件进行主从复制情况.(转)
mysql5.5 对触发器,函数,存储引擎,事件进行主从复制情况. 转(http://blog.csdn.net/m582445672/article/details/7670802) 一.My ...
- python 全栈开发,Day64(视图,触发器,函数,存储过程,事务)
昨日内容回顾 pymysql:属于python的一个模块 pip3 install pymysql conn = pymysql.connect(...,charset = 'uft8') 创建游标 ...
- mysql 查询表,视图,触发器,函数,存储过程
1. mysql查询所有表: SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '数据库名' AND TAB ...
- MySQL 5.5 主从复制
MySQL 5.5 主从复制的原理.过程 分为同步复制和异步复制,实际复制架构中大部分为异步复制.复制的基本过程如下: 1).Slave上面的IO进程连接上Master,并请求从指定日志文件的指 ...
- MySQL 系列(三)你不知道的 视图、触发器、存储过程、函数、事务、索引、语句
第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...
- MySQL 之 视图、触发器、存储过程、函数、事物与数据库锁
浏览目录: 1.视图 2.触发器 3.存储过程 4.函数 5.事物 6.数据库锁 7.数据库备份 1.视图 视图:是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据 视 ...
- 触发器 视图 存储过程 mysql常用函数
...
- 【MySQL笔记】触发器,存储过程和函数
一.触发器 触发器(TRIGGER):是由事件来触发某个操作.当数据库系统执行这些事件时,就会激活触发器执行相应的操作.MySQL从5.0.2版本开始支持触发器. 触发事件:INSERT语句.UPDA ...
- 数据库MySQL之 视图、触发器、存储过程、函数、事务、数据库锁、数据库备份、事件
数据库MySQL之 视图.触发器.存储过程.函数.事务.数据库锁.数据库备份.事件 浏览目录 视图 触发器 存储过程 函数 事务 数据库锁 数据库备份 事件 一.视图 1.视图概念 视图是一个虚拟表, ...
随机推荐
- 导出 XE6 预设 Android Style (*.style) 档案
如果想要修改 Android Style 可以将它导出成 *.style 后再加入 TStyleBook 内来修改(iOS 的方法亦同):
- HDU 4745---Two Rabbits(区间DP)
题目链接 http://acm.split.hdu.edu.cn/showproblem.php?pid=4745 题意:两只兔子,在n块围成一个环形的石头上跳跃,每块石头有一个权值ai,一只从左往右 ...
- Scalaz(52)- scalaz-stream: 并行运算-parallel processing concurrently by merging
如果scalaz-stream真的是一个实用的数据流编程工具库的话,那它应该能处理同时从多个数据源获取数据以及把数据同时送到多个终点(Sink),最重要的是它应该可以实现高度灵活的多线程运算.但是:我 ...
- python队列Queue
Queue Queue是python标准库中的线程安全的队列(FIFO)实现,提供了一个适用于多线程编程的先进先出的数据结构,即队列,用来在生产者和消费者线程之间的信息传递 基本FIFO队列 clas ...
- Android 手机卫士4--设置中心显示
1,自定义属性 SettingActivity.java package com.itheima.mobilesafe74.activity; import com.itheima.mobilesaf ...
- 简单的Writer和Reader
Writer用于写出去到文件中,Reader用于将外面的文件读进来控制台 Writer和Reader有许多子类,但是子类大多都是直接运用父类Writer和Reader的方法,而且Writer和Read ...
- [转载]jQuery诞生记-原理与机制
by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=3520 一.看似偶然的 ...
- 纯CSS3写的10个不同的酷炫图片遮罩层效果
这个是纯CSS3实现的的10个不同的酷炫图片遮罩层效果,可以欣赏一下 在线预览 下载地址 实例代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1 ...
- jQuery Wheel Menu:实现漂亮的 Path 风格旋转菜单
相信很多用过 Path 的都对它的独特的旋转导航菜单有深刻的印象,这个功能也被很多的 Web 开发者模仿.今天分享的这款插件可以方便的在你的网站中加入和 Path 一样的旋转菜单,可以自定义效果. 您 ...
- 使用 HTML5 Canvas 绘制出惊艳的水滴效果
HTML5 在不久前正式成为推荐标准,标志着全新的 Web 时代已经来临.在众多 HTML5 特性中,Canvas 元素用于在网页上绘制图形,该元素标签强大之处在于可以直接在 HTML 上进行图形操作 ...