双主其实说白了也是一个replication,只是推出一些新的拓扑结构

 
主-主的复制有两种模式:

主动-主动模式下的主-主复制(Master-Master in Active-Active Mode)
 
模式下的主-主复制(Master-Master in Active-Passive Mode)
 
当然还有,环形和有从服务器的主-主复制,不过都是上面的延生。
 
关于第一种的双主模式,肯定是会产生数据冲突的。虽然可以使用配置
auto_increment_increment=2和auto_increment_offset=1可以解决
自动插入的问题,允许同时插入数据的话,数据还是会不一致的。例如:
下面的两个命令同时执行:

第一个主服务器:
mysql>update tbl set col=col +1;
第二个主服务器:
mysql>update tbl set col=col*2;
 
结果是什么?一个服务器的值为4,而另外一个为3.并且根本没有replication的错误。
 
所以,个人建议主动-被动的双主模式,只让一台服务器写就行了,让它对外服务,
另外一台作为备用。只接受数据。
 
下面开始进入正题,如何配置双主。
 
第一步,启动来台数据库的时候,mysql.cnf都得配置下面的语句
 
3306:
server-id = 323306

log_slave_updates = 1
auto_increment_increment=2
auto_increment_offset=1
 
 
3307:
server-id = 323307
log_slave_updates = 1
auto_increment_increment=2
auto_increment_offset=2
read-only(保证只读)
 
当然每台服务器的port,user,socket,pid-file,basedir,datadir,tmpdir以及与log相关的:log-bin(这个是必须开启的),slow_query_log_file(当然也要开启)等等。就不说了。
 
这里最重要的就是log_slave_updates,没有它,双主是配不成的,关于它的详细介绍。在如下网址:
http://dev.mysql.com/doc/refman/5.5/en/replication-options-slave.html#option_mysqld_log-slave-updates
 
说白了,就是可以A -> B -> C,保证A可以作为master,复制到B,B可以作为master,复制到C.所以呢,如果A和B互相的话,就是双主了。
 
第二步,接着就是两台服务器都配上repl用户。
mysql> CREATE USER 'repl'@'192.168.1.50' IDENTIFIED BY 'repl';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.50';
 
备注:'192.168.1.50'这个IP,是告诉来自于这个IP的主机有REPLICATION SLAVE的权限。
 
第三步,就跟配置replication是一样的。保证一致性的备份。
 
SHOW MASTER STATUS;知道对应的binlog.
 
再在slave上面进行change master to
mysql>CHANGE MASTER TO
MASTER_HOST = '192.168.1.40',
MASTER_PORT = 3306,
MSTER_USER = 'repl',
MASTER_PASSWORD = 'repl',
MASTER_LOG_FILE = 'mysql-bin.000004',
MASTER_LOG_POS = 107;
 
接着换过来,由于slave接受了master的binlog,自己又设置了log_slave_updates而且binlog也同时打开了,所以salva也可以看到自己的binlog。接着把上面的事情,同样再做一遍。即可
 
这样,双主就算配置成功。(没有什么太详细的步骤,不过基本上都说到位了。配置的话,跟mysql replication一致。http://blog.chinaunix.net/uid-26446098-id-3267475.html可以参考此文)
 
 
 

牛刀小试MySQL学习—MySQL 双主的更多相关文章

  1. Mysql + keepalived 实现双主热备读写分离【转】

    Mysql + keepalived 实现双主热备读写分离 2013年6月16日frankwong发表评论阅读评论   架构图 系统:CentOS6.4_X86_64软件版本:Mysql-5.6.12 ...

  2. MySQL 5.7双主同步部分表

    参考:http://www.jb51.net/article/122892.htm?pc 前言: 我们要配置双主同步的mysql服务器. 暂时叫做,mysql1和mysql2吧. 一  mysql的配 ...

  3. centos 下 mysql+keepalived实现双主自由切换

    目录 ip规划 mysql双主配置 keepalived配置 mysql1中keepalived的配置 mysql2中keepalived的配置 VIP漂移检测 本文的目的是搭建一个互为主从的mysq ...

  4. MySQL的主从复制+双主模式

    MySQL的主从复制 部署环境: MySQL master 192.168.40.21 MySQL slave  192.168.40.22 思路: 当主MySQL上进行数据上的操作或者变化时,主My ...

  5. MySQL 5.7 双主复制+keepalived,常规业务一般够用了

    业务需求: 为Zabbix搭建2个数据库,一个库给服务器监控用,一个库给网络监控用. 硬件: 两台服务器,硬盘是1.2 T SSD卡,内存128G 架构: 希望做双主复制+keepalived,架构大 ...

  6. [Mysql高可用]——双主互备+keepalived

    实验架构图    实验环境 主机名 操作系统 Mysql版本 keepalived版本 主机IP VIP lyj1(Master/Slave) Red Hat release 6.5 Mysql5.6 ...

  7. mysql主从复制及双主复制

    之前做过一次在单台机器上的多实例的mysql,这次分开做,使用两台主机. 这里使用的主机地址分别为: MASTER:192.168.214.135 SLAVE  : 192.168.214.128 这 ...

  8. mysql 5.7 双主+主从配置

    mysql5.7安装及赋权 wget http://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm rpm -ivh mysql57 ...

  9. Mysql之配置双主热备+keeepalived.md

    准备 1 1. 双主 master1 192.168.199.49 2 master2 192.168.199.50 3 VIP 192.168.199.52 //虚拟IP 4 2.环境 master ...

随机推荐

  1. jeesite ckfinder mac/linux 文件上传路径设置

    背景: 如果你使用的是Mac 或者 Ubuntu 这种 Unix系统的话,你一定知道Unix系统的文件路径分隔符是 / 而Windows系统文件分隔符是 \ 当你设置了jeesite.properti ...

  2. 枚举详解之EnumSet、EnumMap用法

    枚举简单例子 /** * @author shuliangzhao * @Title: Color * @ProjectName design-parent * @Description: TODO ...

  3. Vue中nextTick()解析

    最近,在开发的时候遇到一个问题,让我对vue中nextTick()的用法加深了了解- 下面是在组件中引用的一个拖拽的组件: <vue-draggable-resizable class=&quo ...

  4. 写出更好的 JavaScript 条件语句

    1. 使用 Array.includes 来处理多重条件 // 条件语句 function test(fruit) { if (fruit == 'apple' || fruit == 'strawb ...

  5. 【Codeforces1117C_CF1117C】Magic Ship(构造)

    题目: Codeforces1117C 考的时候很困,开局半小时后才过A,只做出来AB,排名3000+,掉了119--半夜体验极差. 翻译: 你是一个船长.最初你在点 \((x_1,y_1)\) (显 ...

  6. ACM_尿裤子

    Problem Description: 小X上课的时候喝了一大壶水,午饭后他极限跑回宿舍上厕所,结果发现不知道哪个逗比舍友在宿舍门上加了一把4位密码锁,然后还留了纸条:密码是6666,小X只能一个一 ...

  7. Servlet到Servlet的请求转发与重定向的区别

    Servlet跳转到另一个Servlet中: request.getRequestDispatcher().forward();代表默认的是post方法,即在被跳转的Servlet的doPost()方 ...

  8. [ ZJOI 2006 ] Trouble

    \(\\\) \(Description\) 有\(N\)个人的环,每个人需要至少\(x_i\)种不同的物品,并且要求任意相邻的两人都没有相同的物品,求最少需要多少种物品. \(N\in [0,2\t ...

  9. HTTP05--HTML常用知识

    一.URL地址含义 需要搞清URL和URI的差别,以及QueryString的含义. 二.GET和POST的区别 详细介绍可参考文章:http://zengrong.net/post/1802.htm ...

  10. linux共享库的版本控制

    前几天看到一篇介绍linux共享库版本控制及使用的文章,觉得不错,这里就与大家分享一下. 1. Linux约定 经常看到Linux中,共享库的名字后面跟了一串数字,比如:libperl.so.5.18 ...