实际是主从配置的扩展,例如有两台机器a1,a2,主从模式为a1(M)-a2(S),双主模式就是a1-a2,然后a2-a1
成都创新互联专注于长丰企业网站建设,响应式网站设计,商城网站开发。长丰网站建设公司,为长丰等地区提供建站服务。全流程定制网站,专业设计,全程项目跟踪,成都创新互联专业和态度为您提供的服务
这样,当任意一台挂掉的时候,其中一台可以完全负担起读和写的任务。
**创建主节点用户供从节点拉取数据用(62-215)
同主
修改用户名密码
账号登陆
同主
(62做从节点从215拉数据的账号)
双主至此配置完成,其实就是先配置a-b,在配置b-a
注意,每次重启mysql服务以后,需要重新执行start slave命令
这种架构一般用在以下三类场景
1. 备份多台 Server 的数据到一台如果按照数据切分方向来讲,那就是垂直切分。比如图 2,业务 A、B、C、D 是之前拆分好的业务,现在需要把这些拆分好的业务汇总起来备份,那这种需求也很适用于多源复制架构。实现方法我大概描述下:业务 A、B、C、D 分别位于 4 台 Server,每台 Server 分别有一个数据库来隔离前端的业务数据,那这样,在从库就能把四台业务的数据全部汇总起来,而不需要做额外的操作。那没有多源复制之前,要实现这类需求,只能在汇总机器上搭建多个 MySQL 实例,那这样势必会涉及到跨库关联的问题,不但性能急剧下降,管理多个实例也没有单台来的容易。
2. 用来聚合前端多个 Server 的分片数据。
同样,按照数据切分方向来讲,属于水平切分。比如图 3,按照年份拆分好的数据,要做一个汇总数据展现,那这种架构也非常合适。实现方法稍微复杂些:比如所有 Server 共享同一数据库和表,一般为了开发极端透明,前端配置有分库分表的中间件,比如爱可生的 DBLE。
3. 汇总并合并多个 Server 的数据
第三类和第一种场景类似。不一样的是不仅仅是数据需要汇总到目标端,还得合并这些数据,这就比第一种来的相对复杂些。比如图 4,那这样的需求,是不是也适合多源复制呢?答案是 YES。那具体怎么做呢?
在MySQL服务器1中,添加如下配置:
在MySQL服务器2中,添加如下设置:
在这里两台MySQL的配置文件,需要对auto_increment_offset字段,设定不同值。因为如果mysql中有自增长字段,不设定这个参数会起冲突,会报duplicate....的报错。
auto_increment_offset表示自增长字段从那个数开始,他的取值范围是1 .. 65535
auto_increment_increment表示自增长字段每次递增的量,其默认值是1,取值范围是1 .. 65535
做主主同步配置时,需要将两台服务器的auto_increment_increment增长量都配置为2,而要把auto_increment_offset分别配置为1和2,这样可以避免两台服务器同时做更新时,自增长字段的值之间发生冲突。
配置好两台mysql的my.cnf配置文件后,service mysqld restart 重启mysql服务。
在Mysql服务器1中,
在MySQL服务器2中,做如上同样的操作,然后将服务器1的file和position值设定到服务器2中,服务器2的file和position值输入到服务器1中。
在MySQL服务器1中,输如下命令:
在MySQL服务器2中,输如下命令:
范例如下图:
配置完后,分别在两台服务器上输show slave status ;
如果出现如下两个字段都是on的状态,则主主备份搭建完成。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
在实际测试配置中,由于MySQL服务器2是克隆的MySQL服务器1的,所以start slave 后,show slave status 出现了Slave_IO_Running: No ,然后有如下报错信息。告知是因为两个MySQL服务器的UUID相重复了。
只需要,将basedir,即/use/local/mysql/data中的auto.cnf文件删掉后,重启mysql,就会出现新的auto.cnf文件,里面有新的UUID
IP的设置:A主机 IP:10.10.0.119;Mask:255.255.0.0;B主机 IP:10.10.8.112;Mask:255.255.0.0
在IP设置完成以后,需要确定两主机的防火墙确实已经关闭。可以使用命令service iptables status查看防火墙状态。如果防火墙状态。
为仍在运行。使用service iptables stop来停用防火墙。如果想启动关闭防火墙,可以使用setup命令来禁用或定制。最终以两台主机可以相互ping通为佳。
3.2 配置A主(master) B从(slave)模式;3.2.1 配置A 为master。
增加一个用户同步使用的帐号:
GRANT FILE ON *.* TO ‘backup’@'10.10.8.112' IDENTIFIED BY ‘1234’;
GRANTREPLICATION SLAVE ON *.* TO ‘backup’@'10.10.8.112' IDENTIFIED BY ‘1234’。
赋予10.10.8.112也就是Slave机器有File权限,只赋予Slave机器有File权限还不行,还要给它REPLICATION SLAVE的权限才可以。
增加一个数据库作为同步数据库:create database test;
创建一个表结构:create table mytest (username varchar(20),password varchar(20));
修改配置文件:修改A的/etc/my.cnf文件。
在my.cnf配置项中加入下面配置:
server-id = 1 #Server标识
log-bin
binlog-do-db=test #指定需要日志的数据库
重起数据库服务:
service mysqld restart
查看server-id:
show variable like ‘server_id’。
在[mysqld]配置段添加如下字段
使用master状态
show master status; 记录file和position的值
在[mysqld]配置段添加如下字段,
连接slave,在mysql命令行执行以下命令,设置参数,启动slave
MASTER_LOG_FILE 对应master的status的file
MASTER_LOG_POS 对应master的status的position
主要查看Slave_IO_Running和Slave_SQL_Running 两列是否都为YES