主动的Master-Master复制有一些特殊的用处。例如,地理上分布的两个部分都需要自己的可写的数据副本。这种结构最大的问题就是更新冲突。假设一个表只有一行(一列)的数据,其值为1,如果两个服务器分别同时执行如下语句:
在第一个服务器上执行:
mysql> UPDATE tbl SET col=col + 1;
在第二个服务器上执行:
mysql> UPDATE tbl SET col=col * 2;
那么结果是多少呢?一台服务器是4,另一个服务器是3,但是,这并不会产生错误。
实际上,MySQL并不支持其它一些DBMS支持的多主服务器复制(Multimaster Replication),这是MySQL的复制功能很大的一个限制(多主服务器的难点在于解决更新冲突),但是,如果你实在有这种需求,你可以采用MySQL
Cluster,以及将Cluster和Replication结合起来,可以建立强大的高性能的数据库平台。但是,可以通过其它一些方式来模拟这种多主服务器的复制。
优点:
1、相比statement更加安全的复制格式。(选row模式的更大原因)
2、在某些情况下复制速度更快。(复杂sql,表有主键)
3、产生比statement更少的锁。
4、所有特殊函数都能复制。
缺点:
1、binlog文件较大。在MySQL-5.6新特性参数binlog_row_image解决此问题。
2、单sql全表更新会产生大量binlog。
3、无法从binlog看见用户执行的sql。MySQL-5.6新特性参数binlog_rows_query_log_event解决此问题。