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.%';
查看master1的二进制位置
mysql> show master logs;
(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;
(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;
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
完成主主复制配置
5.备注
xshell同时在多个终端进行输入