实战案例:主主复制

129 阅读2分钟

1.实验目的:两个节点,都可以更新数据,并且互为主从

2.分析实验

容易产生的问题:数据不一致;因此慎用

考虑要点:自动增长id

配置一个节点使用奇数id

auto_increment_offset=1   #开始点
auto_increment_increment=2 #增长幅度

另一个节点使用偶数id

auto_increment_offset=2
auto_increment_increment=2

3.主主复制的配置步骤:

(1) 各节点使用一个唯一server_id

(2) 都启动binary log和relay log

(3) 创建拥有复制权限的用户账号

(4) 定义自动增长id字段的数值范围各为奇偶

(5) 均把对方指定为主节点,并启动复制线程

4.实现两个节点的主主复制模型,详细配置如下

环境准备:

两台机器已装好mysql

master1:10.0.0.149

master2:10.0.0.151

(1)在第一个master节点上实现

启用二进制日志,设置一个全局唯一的ID号,配置一个节点使用奇数id

[root@master1 ~]#vim /etc/my.cnf
[mysqld]
server-id=149
log-bin
auto_increment_offset=1         #开始点
auto_increment_increment=2      #增长幅度  

[root@master1 ~]#systemctl start mysqld

创建有复制权限的用户账号

mysql> create user repluser@'10.0.0.%' identified by '123456';
mysql> grant replication slave on *.* to repluser@'10.0.0.%';

image.png

查看master1的二进制位置

mysql> show master logs;

image.png

(2)在第二个master节点上实现

配置与第一个master类似

[root@master2 ~]#vim /etc/my.cnf
[mysqld]
server-id=151
log-bin
auto_increment_offset=2         #开始点
auto_increment_increment=2      #增长幅度  

[root@master2 ~]#systemctl start mysqld
mysql> CHANGE MASTER TO
    -> MASTER_HOST='10.0.0.149',
    -> MASTER_USER='repluser',
    -> MASTER_PASSWORD='123456',
    -> MASTER_PORT=3306,
    -> MASTER_LOG_FILE='localhost-bin.000001',
    -> MASTER_LOG_POS=692;

mysql> start slave;

mysql> show master logs;

image.png

(3)在第一个master节点上实现

mysql> CHANGE MASTER TO
    -> MASTER_HOST='10.0.0.151',
    -> MASTER_USER='repluser',
    -> MASTER_PASSWORD='123456',
    -> MASTER_PORT=3306,
    -> MASTER_LOG_FILE='localhost-bin.000001',
    -> MASTER_LOG_POS=692;

mysql> start slave;

image.png

mysql> create table t1(id int auto_increment primary key,name char(10));

(4)两个节点分别插入数据

在第一个节点上执行

mysql> insert t1 (name) values('user1');

在第二个节点上执行

mysql> insert t1 (name) values('user2');

两个节点同时插入数据

mysql> insert t1 (name) values('userX');

此时查询数据可以看到已经成功插入

select * from t1;

如果两个节点同时创建数据库,会发生复制冲突

create database db2;
show slave status\G

image.png

image.png

完成主主复制配置

5.备注

xshell同时在多个终端进行输入

image.png

image.png