参考:https://www.alessandronuccio.it/2021/01/08/mysql-8-master-master-replication/
1、环境设定
CentOS 8.0
MySQL 8.0
服务器IP:节点A:192.168.25.170 节点B:192.168.25.171
2、设置防火墙
关闭或开放3306端口
#systemctl stop firewalld
3、配置conf文件
#vim /etc/my.cnf
在A节点上添加
bind-address = 192.168.25.170
server-id = 1
log_bin = mysql-bin
在B节点上添加
bind-address = 192.168.25.171
server-id = 2
log_bin = mysql-bin
重启节点:#systemctl restart mysqld.service
4、创建复制的用户
在A节点上添加用户并授权
#mysql -uroot -p
mysql>CREATE USER 'replica'@'192.168.25.171' IDENTIFIED BY 'R3plic4$';
mysql>ALTER USER 'replica'@'192.168.25.171' IDENTIFIED WITH mysql_native_password BY 'R3plic4$';
mysql>grant replication slave on *.* to replica@192.168.25.171;
在B节点上添加用户并授权
#mysql -uroot -p
mysql>CREATE USER 'replica'@'192.168.25.170' IDENTIFIED BY 'R3plic4$';
mysql>ALTER USER 'replica'@'192.168.25.170' IDENTIFIED WITH mysql_native_password BY 'R3plic4$';
mysql>grant replication slave on *.* to replica@192.168.25.170;
5、A节点作为主节点,配置A到B的复制
查看A节点的master信息
mysql>show master status\G;
mysql> show master status\G;
*************************** 1. row ***************************
File: binlog.000003
Position: 156
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
ERROR:
No query specified
在B节点上设置从节点,以下在B节点上执行
mysql>stop slave;
CHANGE MASTER TO
MASTER_HOST='192.168.25.170',
MASTER_USER='replica' ,
MASTER_PASSWORD='R3plic4$',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=1019;
mysql>start slave;
mysql>show slave status\G; 查看从节点的信息
Slave_IO_State:Waiting for master to send eventMaster_Host:192.168.25.170Slave_IO_Running:YesSlave_SQL_Running:Yes
6、B节点作为主节点,配置B到A的复制
查看B节点的master信息
mysql>show master status\G;
mysql> show master status\G;
************************** 1. row ***************************
File: binlog.00000
Position: 1020
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
ERROR:
No query specified
在A节点上设置从节点,以下在A节点上执行
mysql>stop slave;
CHANGE MASTER TO
MASTER_HOST='192.168.25.171',
MASTER_USER='replica' ,
MASTER_PASSWORD='R3plic4$',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=1020;
mysql>start slave;
mysql>show slave status\G; 查看从节点的信息
Slave_IO_State:Waiting for master to send eventMaster_Host:192.168.25.171Slave_IO_Running:YesSlave_SQL_Running:Yes
7、测试
可以复制针对数据库、表、数据的操作。
创建数据库、创建表、插入数据。并在两边查看是否都有。
8、问题
MySQL主主复制,实际上是主动读,不是主动推,因此会有数据的延迟。不能用于同时写入和同时读取。