一、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 方式) 这种模式下复制情况
可以看到通过系统函数转换后的值复制给从服务器.不需要在从服务器上建立当binlog_format = row 或 binlog_format = mixed(使用混合模式用的是row方式)
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也会执行.