服务器信息

IP Hostname module
172.16.1.11 master-A mysql
172.16.1.12 master-B mysql
172.16.1.13 slave-A mysql
172.16.1.14 slave-B mysql

实现结果:往任意主库修改数据,四台节点均可以实现数据同步

配置Master-A

1
2
3
4
5
6
7
8
vim /etc/my.cnf
[mysqld]
添加:
server_id=1
log_bin=mysql-bin
log-slave-updates=on
auto_increment_offset=1
auto_increment_increment=2

解释
server_id=1 # 设置集群中的节点唯一标识
log_bin=mysql-bin # 开启二进制日志文件,并指定二进制日志文件名字以及存放路径
log-slave-updates=on # 从节点同步的数据操作写入到二进制日志文件中
auto_increment_offset=1 # 从编号1开始自增
auto_increment_increment=2 # 每次自增2,也就是1、3、5…

重启服务

1
systemctl restart mysqld

授权

1
2
3
4
5
mysql -u root -p123.com

grant replication privileges on *.* to 'slave'@'172.16.1.%' identified by '123.com';

flush privileges;

replication : 复制权限
all : 所有权限
select,update : 查询和更新权限
收回权限:revoke 权限 on 数据库对象 from 用户

配置Master-B

1
2
3
4
5
6
7
8
vi /etc/my.cnf
[mysqld]
添加:
server_id=2
log_bin=mysql-bin
log-slave-updates=on
auto_increment_offset=2
auto_increment_increment=2

重启服务

1
systemctl restart mysqld

授权

1
2
3
4
5
mysql -u root -p123.com

grant replication privileges on *.* to 'slave'@'172.16.1.%' identified by '123.com';

flush privileges;

配置Master-A和Master-B互同步

Master-A指向Master-B

Master-B操作查看master状态

1
2
3
4
5
6
mysql> show master status;

mysql-bin.000002 414

row in set ( 0.o0 sec)

Master-A操作

1
change master to master_host='172.16.1.12',master_user='slave',master_password='123.com',master_log_file='mysql-bin.000002',master_log_pos=414;	

Master-A开启从状态

1
mysql> start slave;

Master-A查看从状态信息,I/O线程和SQL线程是否为YES

1
2
3
show slave status\G;
Slace_IO_Runing: Yes
Slave_SQL_Runing: Yes

Master-B指向Master-A

Master-A操作查看master状态

1
2
3
4
5
mysql> show master status;

mysql-bin.000001 414

row in set ( 0.o0 sec)

Master-B操作

1
change master to master_host='172.16.1.11',master_user='slave',master_password='123.com',master_log_file='mysql-bin.000002',master_log_pos=414;	

Master-B开启从状态

1
mysql> start slave;

Master-B查看从状态信息,I/O线程和SQL线程是否为YES

1
2
3
show slave status\G;
Slace_IO_Runing: Yes
Slave_SQL_Runing: Yes

从节点指向主节点

Slave-A指向Master-A

Slave-A操作

1
2
3
4
vi /etc/my.cnf
添加:
server_id=3
relay-log=relay-log-bin

重启服务

1
systemctl restart mysqld

连接master-A

1
2
3
mysql> change master to master_host='172.16.1.11',master_user='slave',master_password='123.com',master_log_file='mysql-bin.000001',master_log_pos=414;
mysql> start slave;
mysql> show slave status\G;

Slave-B指向Master-B

Slave-B操作

1
2
3
4
vi /etc/my.cnf
添加:
server_id=4
relay-log=relay-log-bin

重启服务

1
systemctl restart mysqld

连接master-B

1
2
3
mysql> change master to master_host='172.16.1.12',master_user='slave',master_password='123.com',master_log_file='mysql-bin.000002',master_log_pos=414;
mysql> start slave;
mysql> show slave status\G;