一、主主复制说明

   MySQL主主复制结构区别于主从复制结构。在主主复制结构中,两台服务器的任何一台上面的数据库存发生了改变都会同步到另一台服务器上,这样两台服务器互为主从,并且都能向外提供服务。 这就比使用主从复制具有更好的性能。

二、关于主主复制过程中server-id的说明

   因为主主复制架构中是两台服务器互为主从,所以两台服务器必须都有填制日志和中继日志,而且他们的server-id必须不能一样。如果server-id一样了,那么:

   1、数据写入到A服务器的数据文件和二进制文件中,然后发送给B的中继日志;B根据中继日志写入到磁盘数据文件中

   2、同样的,此时B服务器发生数据修改,所以它会把记录写入到二进制日志文件中,然后再发送给A服务器的中继日志;A根据中继日志写入到数据文件中

   3、A、B都有中继日志,所以从中继日志中读过来的数据修改操作会写入到二进制文件中;这样,双方的二进制日志一变化,就会发送给对方的中继日志(而数据其实是相同的),这样不停地来来回回,就造成了死循环

   4、为了避免这种情况,就应该为A、B服务器指定不同的sercer-id,每个服务器在复制数据时,会保留对方信息的server-id;因此,A服务器通过B服务器复制过来的信息到中继日志,发现server-id就是自己的,就没有必要在写在本地了,这样就避免了循环复制

三、主主复制的实现

1、修改A服务器的配置


mariadb gtid 主从切换 mariadb主从复制_数据文件

2、修改B服务器的配置文件


mariadb gtid 主从切换 mariadb主从复制_数据_02

3、A服务器授权一个有复制权限的账号给B服务器

mariadb gtid 主从切换 mariadb主从复制_服务器_03

4、B服务器授权一个有复制权限的账号给A服务器


mariadb gtid 主从切换 mariadb主从复制_数据文件_04

5、显示A服务器的状态信息,且去连接B服务器

mariadb gtid 主从切换 mariadb主从复制_服务器_05

6、显示B服务器的状态信息,且去连接A服务器


mariadb gtid 主从切换 mariadb主从复制_数据库_06

7、在A服务器上启动复制线程,并查看是否连接B服务器成功


mariadb gtid 主从切换 mariadb主从复制_服务器_07

8、在A服务器上启动复制线程,并查看是否连接B服务器成功


mariadb gtid 主从切换 mariadb主从复制_服务器_08

9、在A服务器上创建一个表


mariadb gtid 主从切换 mariadb主从复制_mariadb gtid 主从切换_09

10、在A服务器上插入两条数据


mariadb gtid 主从切换 mariadb主从复制_数据_10

11、在B服务器上同步成功。同样的,在B服务器上插入2条数据,就会同样的同步到A服务器中去了


mariadb gtid 主从切换 mariadb主从复制_mariadb gtid 主从切换_11

四、遗留问题

   实验过程中,只保证了在A服务器上插入的是奇数id,在B服务器上插入的是偶数id,但没能实验让它们按顺序插入;如果你能告诉我这个解决办法,真是太感谢了!!!


本文转自 nmshuishui 51CTO博客,原文链接:http://blog.51cto.com/nmshuishui/1396064,如需转载请自行联系原作者