【MySQL 实战】04. MySQL 主从复制(双主双从)

1. 架构

上一篇我们配置了一主一从,这一篇我们配置一下双主双从。
在这里插入图片描述

角色ip 地址简称
Master1192.168.183.134134 主
Slave1192.168.183.133133 从
Master2192.168.183.128128 主
Slave2192.168.183.135135 从

2. 配置

修改134主配置文件 vi /etc/my.cnf

#主服务器唯一ID
server-id=1
#启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#设置需要复制的数据库
binlog-do-db=testdb
#设置logbin格式
binlog_format=STATEMENT
# 在作为从数据库的时候, 有写入操作也要更新二进制日志文件
log-slave-updates
#表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1, 取值范围是1 .. 65535
auto-increment-increment=2
# 表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535
auto-increment-offset=1

修改128主配置文件 vi /etc/my.cnf ,只需要修改 server-id 和 auto-increment-offset=2

#主服务器唯一ID
server-id=3
#启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)Java
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#设置需要复制的数据库
binlog-do-db=testdb
#设置logbin格式
binlog_format=STATEMENT
# 在作为从数据库的时候,有写入操作也要更新二进制日志文件
log-slave-updates
#表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1 .. 65535
auto-increment-increment=2
# 表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535
auto-increment-offset=2

修改133从配置文件 vi /etc/my.cnf

#从服务器唯一ID
server-id=2
#启用中继日志
relay-log=mysql-relay

修改135从配置文件 vi /etc/my.cnf

#从服务器唯一ID
server-id=4
#启用中继日志
relay-log=mysql-relay

双主双从重启mysql服务 ,开放3306端口,关闭防火墙

#重启mysql服务器
systemctl restart mysqld
#查看mysql的状态
systemctl status mysqld
# 查看防火墙状态
systemctl status firewalld
# 开启防火墙
systemctl start firewalld
# 开启3306端口
firewall-cmd --permanent --zone=public --add-port=3306/tcp
# 重新加载防火墙
firewall-cmd --reload
# 查看防火墙是否启动成功
firewall-cmd --zone=public --query-port=3306/tcp
# 关闭防火墙
systemctl stop firewalld

在134 主服务器授予133 从服务器访问权限

# 登陆134 mysql
mysql -uroot -proot
# 执行授权命令
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';
# 查询master的状态
show master status;

在这里插入图片描述
在128 主服务器授予135 从服务器访问权限

# 登陆134 mysql
mysql -uroot -proot
# 执行授权命令
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';
# 查询master的状态
show master status;

在这里插入图片描述
双从服务重置主从

# 登陆mysql
mysql -uroot -proot
# 停止从服务器复制功能
stop slave;
# 重置主从
reset master;

133从执行复制命令

CHANGE MASTER TO MASTER_HOST='192.168.183.134',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000004',MASTER_LOG_POS=154;

133 分别执行 启动复制命令start slave; 和查看服务器状态命令 show slave status\G;
在这里插入图片描述
135 从执行复制命令

CHANGE MASTER TO MASTER_HOST='192.168.183.128',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=443;

135从 分别执行 启动复制命令start slave; 和查看服务器状态命令 show slave status\G;
在这里插入图片描述
两个主机互相复制

主134 执行复制命令

CHANGE MASTER TO MASTER_HOST='192.168.183.128',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=443;

134从主 分别执行 启动复制命令start slave; 和查看服务器状态命令 show slave status\G;
在这里插入图片描述
主128 执行复制命令

CHANGE MASTER TO MASTER_HOST='192.168.183.134',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000004',MASTER_LOG_POS=154;

128主 分别执行 启动复制命令start slave; 和查看服务器状态命令 show slave status\G;
在这里插入图片描述

3. 测试

128 主服务器上我们分别执行创建数据库,创建表,表中插入数据。

CREATE DATABASE testdb;
use testdb;
CREATE TABLE user(id INT,NAME VARCHAR(20));
INSERT INTO user VALUES(1,'fengjiaixng');
select * from user;

其它服务器均执行

show databases;
use testdb;
select * from user;

在这里插入图片描述

问题

在执行主从复制过程中,134 主服务器可以获取到主128的数据,但是135从无法获取128主的数据。
在这里插入图片描述
Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.

日志错误描述 master and slave 具有相同的 uuid。

解决

在mysql 数据目录下,删除auto.cnf 文件,默认在 /var/lib/mysql文件夹下。删除后,重启mysql 服务器。

cd /var/lib/mysql
rm -rf auto.cnf
#重启mysql服务器
systemctl restart mysqld
#查看mysql的状态
systemctl status mysqld
# 登陆mysql
mysql -uroot -proot
# 停止从服务器复制功能
stop slave;
# 重置主从
reset master;

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值