一 MySQL双主双从基础
1.1 介绍
一台主机Master1用于处理所有写请求,它的从机Slave1和另一台主机Master2还有它的从机Slave2负责所有读请求,当Master1主机宕机后,Master2主机负责写请求,Master1、Master2互为备机。
1.2 服务器规划
编号 | 服务器IP | 安装软件 | 角色 |
1 | 192.168.0.99 | MySQL-8.0.26 | Master1 |
2 | 192.168.0.100 | MySQL-8.0.26 | Slave1 |
3 | 192.168.0.101 | MySQL-8.0.26 | Master2 |
4 | 192.168.0.102 | MySQL-8.0.26 | Slave2 |
二 MySQL双主双从安装
2.1 关闭防火墙
四台服务器分别执行
systemctl stop firewalld
systemctl disable firewalld
2.2 安装数据库环境
四台服务器分别执行,之前已分享过MySQL的安装文章,此处不再赘述。
2.3 Master1主库配置
192.168.0.99服务器操作
vim /etc/my.cnf
#mysql 服务ID,保证整个集群环境中唯一,取值范围:1 – 2^32-1,默认为1
server-id=1
#指定同步的数据库
binlog-do-db=db01
binlog-do-db=db02
binlog-do-db=db03
# 在作为从数据库的时候,有写入操作也要更新二进制日志文件
log-slave-updates
重启mysql
systemctl restart mysqld
2.4 Master2主库配置
192.168.0.101服务器操作
vim /etc/my.cnf
#mysql 服务ID,保证整个集群环境中唯一,取值范围:1 – 2^32-1,默认为1
server-id=3
#指定同步的数据库
binlog-do-db=db01
binlog-do-db=db02
binlog-do-db=db03
# 在作为从数据库的时候,有写入操作也要更新二进制日志文件
log-slave-updates
重启mysql
systemctl restart mysqld
2.5 两台主库创建账户并授权
192.168.0.99和192.168.0.101分别执行
#创建test用户,并设置密码,该用户可在任意主机连接该MySQL服务
create user 'test'@'%' identified with mysql_native_password by 'Test@123456';
#为 'test'@'%' 用户分配主从复制权限
grant replication slave on *.* to 'test'@'%';
通过指令查看两台主库的二进制日志坐标
2.6 Slave1从库配置
192.168.0.100服务器操作
vim /etc/my.cnf
#mysql 服务ID,保证整个集群环境中唯一,取值范围:1 – 232-1,默认为1
server-id=2
重启mysql
systemctl restart mysqld
2.7 Slave2从库配置
192.168.0.102服务器操作
vim /etc/my.cnf
#mysql 服务ID,保证整个集群环境中唯一,取值范围:1 – 232-1,默认为1
server-id=4
重启mysql
2.8 两台从库分别设置关联的主库
需要注意Slave1对应的是Master1,Slave2对应的是Master2。
192.168.0.100数据库执行如下sql:
change replication source to source_host='192.168.0.99',source_user='test',source_password='Test@123456',source_log_file='binlog.000002',source_log_pos=663;
start slave;
show slave status\G;
192.168.0.102数据库执行如下sql:
change replication source to source_host='192.168.0.101',source_user='test',source_password='Test@123456',source_log_file='binlog.000002',source_log_pos=663;
start slave;
show slave status\G;
2.9 两台主库相互复制
Master2复制Master1,Master1复制Master2
Master1:192.168.0.99执行如下SQL:
change replication source to source_host='192.168.0.101',source_user='test',source_password='Test@123456',source_log_file='binlog.000002',source_log_pos=663;
start slave;
show slave status\G;
Master2:192.168.0.101执行如下SQL:
change replication source to source_host='192.168.0.99',source_user='test',source_password='Test@123456',source_log_file='binlog.000002',source_log_pos=663;
start slave;
show slave status\G;
2.10 测试
分别在两台主库Master1、Master2上执行DDL、DML语句,查看涉及到的数据库服务器的数据同步情况。
在Master1创建数据库db01,发现其它三台数据库都会同步
create database db01;
在Master1创建表,发现其它三台数据库也会同步
use db01;
create table tb_user(
id int(11) not null,
name varchar(50) not null,
sex varchar(1),
primary key (id)
)engine=innodb default charset=utf8;
在Master2插入数据,发现其它三台数据库也会同步
insert into tb_user(id,name,sex) values(1,'Cat','1');
insert into tb_user(id,name,sex) values(2,'Lucy','0');
insert into tb_user(id,name,sex) values(3,'Candy','1');
至此,MySQL双主双从安装完成,感谢观看。