Mysql双主模型其实也是也是一种replication,即两个mysql互为主备,虽然理论上,双主只要数据不冲突就可以工作的很好,但是实际应用环境中,还是很容易发生数据冲突的情况,比如在同步完成之前,双方都修改同一条记录。因此在实际中,最好不要让两边同时修改。即逻辑上仍按照主从的方式工作。但双主的设置仍然是有意义的,因为这样做之后,切换主备会变的很简单。因为在出现故障后,如果之前配置了双主,则直接切换主备会很容易。

环境配置

Mysql
172.16.254.150/16
Mysql172.16.254.151/16

  配置如下:

安装mysql并提供配置文件,也可以直接在/etc/my.cnf配置文件中[mysqld]段中直接添加自己所需要的配置

[root@localhost ~]# yum -y install mysql mysql-server
[root@localhost ~]# cp /usr/share/mysql/my-large.cnf /etc/my.cnf

开启二进制日志和中继日志,修改server-id,设置auto-increment-increment和auto-increment-offset,为了让双主同时在一张表中进行添加操作时不会出现id冲突

wKioL1N7X6mhS5mLAAGz_1ydfZ4629.jpg

授权用于复制的用户,并指向另一台mysql服务器(172.16.254.151/16)

mysql> grant replication slave, replication client on *.* to 'repluser'@'172.16.%.%' identified by 'mypass';
mysql> change master to master_host='172.16.254.151',master_user='repluser',master_password='mypass',master_log_file='mysql-bin.000004',master_log_pos=106;

另一台Mysql服务器(172.16.254.151/16)与上面配置相同(启用二进制日志、启动中继日志、修改server-id、设置auto-increment-increment和auto-increment-offset、授权复制用户、指向172.16.254.150/16服务器),只不过两台服务器server-id不能相同,auto-increment-offset起始值为2,然后两台服务器启动slave功能,查看两台服务器slave_sql和slave_io线程是否为yes

wKiom1N7YYfRVN73AAFm1GeZR2o737.jpg          wKioL1N7YYDBGvb_AAF4qBrJE90593.jpg


最后,在其中一台服务器上创建一张表,并插入自动增长字段,验证是否已经可以互相同步即可