MySQL主主(双主)数据同步

Lison <cundream@163.com>, v1.0.0, 2019.07.10

MySQL主主(双主)数据同步

1. 两台mysql都可以读写,互为主备,默认只是用一台(masterA)负责数据的写入,另一台(masterB)备用;
2. masterA是masterB的主库,masterB又是masterA的主库,他们互为主从;
不足之处:
1. masterB可能处于抑制空闲状态(可以用他当从库,负责部分查询);
2. 主库后面提供服务的从库要等masterB先同步完了数据后才能去masterB上去同步数据,肯能会造成一定程度的同步延迟;

搭建环境

**系统:**CentOS7

**masterA地址:**192.168.237.100
**masterB地址:**192.168.237.102

A与B机器都安装好了MySQL,数据库与表都提前同步好

配置准备

  1. 需要放行3306 (默认端口)端口或关闭防火墙

  2. 关闭selinux

    vim /etc/selinux/config                //编辑SELinux配置文件
    SELINUX=disabled                //修改值为disabled为关闭
    
    
  3. 锁定masterA只读(flush tables with read lock;)

服务器设置

  1. masterA设置(192.168.237.100)

    vim /etc/my.cnf                //编辑my.cnf文件
    server-id=100   //增加server-id为100,一般为自己ip
    log_bin=log-bin=/var/lib/mysql/binlog //设置log_bin的位置和名称
    //定义一个节点使用奇数id,下面配置表示从1开始每次增2
    auto_increment_offset=2    
    auto_increment_increment=2
    
    
    systemctl restart mysqld.service        //重启mysql服务
    
    
    
    mysql -uroot -p123456            //登录mysql,不要照抄,-u后面是账号,-p后面是密码
    grant replication slave on *.* to 'master'@'192.168.188.102' identified by '123456';        //创建mysql账号repl,只容许指定ip访问,也可以指定ip范围192.168.237.%,其中%为通配符,表示所有;
    flush privileges;            //刷新授权表信息
    flush tables with read lock;    //锁定数据库表暂时无法写服务;
    show master status;        //查看binlog文件值与pos值
    stop slave;            //关闭同步
    
    

在这里插入图片描述

  1. masterB设置(192.168.237.102)

    vim /etc/my.cnf                //编辑my.cnf文件
    server-id=102   //增加server-id为102,一般为自己ip
    log_bin=log-bin=/var/lib/mysql/binlog //设置log_bin的位置和名称
    
    //定义一个节点使用奇数id,下面配置表示从2开始每次增2
    auto_increment_offset=2    
    auto_increment_increment=2
    
    
    systemctl restart mysqld.service        //重启mysql服务
    
    
    mysql -uroot -p123456            //登录mysql,不要照抄,-u后面是账号,-p后面是密码
    grant replication slave on *.* to 'master'@'192.168.188.100' identified by '123456';        //创建mysql账号repl,只容许指定ip访问,也可以指定ip范围192.168.237.%,其中%为通配符,表示所有;
    flush privileges;            //刷新授权表信息
    flush tables with read lock;    //锁定数据库表暂时无法写服务;
    show master status;        //查看binlog文件值与pos值
    stop slave;            //关闭同步
    
    
    
    

开始同步并解锁

change master to master_host='192.168.188.3', master_user='repl', master_password='123456', master_log_file='test02.000001', master_log_pos=664343;     //这里log_file与pos值写的必须是B上show master status;的值
start slave;                    //开启同步
unlock tables;                //解锁写

测试主主

在A的tt数据库下建立t1表,B上查询后有t1表,证明B能同步A修改的数据;
在B的tt数据库下建立t2表,A上查询,有t2表,证明A能同步到B修改后的数据

  1. masterA设置

    mysql -uroot -p123456                //登录mysql
    mysql> use tt;                //切换到数据库tt
    
    
    mysql> create table t1(`id` int(4),`name` char(40));            //插入一个表t1
    mysql> show tables;       //查看当前数据库的表
    
    
    

[外链图片转存失败(img-lDIDXthw-1563170580603)(..\typora-user-images\1563158199805.png)]

  1. masterB设置

    mysql -uroot -p123456                //登录mysql
    use test;                //切换到数据库test
    mysql> show tables;
    

[外链图片转存失败(img-oZ56omuB-1563170580606)(..\typora-user-images\1563158404751.png)]

create table t2(`id` int(4),`name` char(40)); 
  1. 切换masterA(省略了登录与切换数据库的命令)

[外链图片转存失败(img-l7sTLC8d-1563170580627)(..\typora-user-images\1563158472212.png)]

双主多从时注意事项

现在已经是双主配置了,但是如果要进行读写分离,那么我们只需要要再增加N台从库!MySQL主从配置

此时我们在 192.168.216.100 上建库、建表、插入、更新、删除数据,在 另外两台上分别进行查看,发现均已经同步。但是如果我们在
192.168.216.102 上做相应的操作,则发现只有 192.168.216.100 上进行了相应的同步,而
192.168.216.130
上的数据并未同步。这是为什么呢?因为我们设置的主库是 192.168.216.100,所以在 192.168.216.102
进行数据操作的时候并未同步,这显然不符合我们的需求,那么,我们要怎么修改呢?非常简单,在互为主从的两台服务器的配置文件中均加入以下语句:

log-slave-updates=on

加上后将两台服务器的MYSQL重启,然后再进行测试,发现数据已经可以同步了。如果要再多加一些从服务器,和以上类似,现在我们做的是双主一从,我们可以再加N台从服务器,配置也是一样的。

至此,MYSQL主从复制、主主复制、双主多从配置我们均已经搞定!

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值