一个主机master1用于处理所有写请求,它的从机slave1和另一台主机master2还有它的从机slave2负责所有读请求。 当master1主机宕机后,master2主机替代继续负责写请求。也就是master1、master互为备用机,其中一台坏了就另一台补上
1、第一台服务器(192.168.127.138): 安装MySQL、MyCat。 作为MyCat中间件服务器
2、第二台服务器(192.168.127.145): 安装MySQL。作为M1,即主库1
3、第三台服务器(192.168.127.149): 安装MySQL。作为S1, 从库1
4、第四台服务器(192.168.127.150): 安装MySQL。作为M2,即主库2
5、第五台服务器(192.168.127.151): 安装MySQL。作为S2, 即从库2
主库配置(M1-192.168.127.138)
1、修改配置文件(/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
2、重启MySQL服务器
systemctl restart mysqld
主库配置(M2-192.168.127.150)
1、修改配置文件(/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
2、重启MySQL服务器
systemctl restart mysqld
#创建itcast用户,并设置密码,该用户可在任意主机连接主机该MySQL服务
create user 'itcast'@'%' IDENTIFIED WITH mysql_native_password BY '228675';
#为itcast用户分配主从复制权限
grant replication slave on *.* to 'itcast'@'%';
#查看两台主库的二进制日志坐标
show master status;
从库配置(S1-192.168.127.149)
1、修改配置文件(/etc/my.cnf)
#mysql服务ID,保证整个集群环境中唯一,取值范围: 1~2^32-1,默认为1
server-id=2
2、重启MySQL服务器
systemctl restart mysqld
从库配置(S2-192.168.127.151)
1、修改配置文件(/etc/my.cnf)
#mysql服务ID,保证整个集群环境中唯一,取值范围: 1~2^32-1,默认为1
server-id=4
2、重启MySQL服务器
systemctl restart mysqld
change master to master_host='xxx.xxx.xxx.xxx',master_user='xxx',master_password='xxx',master_log_file='xxx',master_log_pos=xxx;
分别启动主从复制
start slave;
show slave status \G;
目前为止,已经配置好了两组主从复制,但是这两组还没有任何关系,所以我们要将这两台主库也相互复制 第一台主库复制第二台主库,第二台主库也复制第一台主库,并启动,查看启动状态,具体操作在下面的具体操作里面
1、在第一台主库(192.168.127.145)执行如下
vim /etc/my.cnf
会出现一个文本编辑页面,使用键盘的向下箭头,在末尾行输入如下五行,然后保存退出
server-id=3
binlog-do-db=db01
binlog-do-db=db02
binlog-do-db=db03
log-slave-updates
重启mysql服务器
xxxxxxxxxx
systemctl restart mysqld
2、在第二台主库(192.168.127.150)执行如下
xxxxxxxxxx
vim /etc/my.cnf
会出现一个文本编辑页面,使用键盘的向下箭头,在末尾行输入如下五行,然后保存退出
xxxxxxxxxx
server-id=3
binlog-do-db=db01
binlog-do-db=db02
binlog-do-db=db03
log-slave-updates
重启mysql服务器
xxxxxxxxxx
systemctl restart mysqld
3、在第一台主库(192.168.127.145),登录mysql,并创建itcast远程用户
mysql -u root -p
create user 'itcast'@'%' IDENTIFIED WITH mysql_native_password BY '228675';
grant replication slave on *.* to 'itcast'@'%';
show master status; #例如查到的结果File对应的是binlog.000002,Position是663。我们要记住这两个参数,后面会用
4、在第二台主库(192.168.127.150),登录mysql,并创建itcast远程用户
mysql -u root -p
create user 'itcast'@'%' IDENTIFIED WITH mysql_native_password BY '228675';
grant replication slave on *.* to 'itcast'@'%';
show master status;#例如查到的结果File对应的是binlog.000002,Position是663。我们要记住这两个参数,后面会用
5、在第一台从库(192.168.127.149)执行如下
xxxxxxxxxx
vim /etc/my.cnf
会出现一个文本编辑页面,使用键盘的向下箭头,在末尾行输入如下一行,然后保存退出
xxxxxxxxxx
server-id=2
重启mysql服务器
xxxxxxxxxx
systemctl restart mysqld
6、在第二台从库(192.168.127.151)执行如下
xxxxxxxxxx
vim /etc/my.cnf
会出现一个文本编辑页面,使用键盘的向下箭头,在末尾行输入如下一行,然后保存退出
xxxxxxxxxx
server-id=4
重启mysql服务器
xxxxxxxxxx
systemctl restart mysqld
7、在第一台从库(192.168.127.149),去关联第一台主库,相关的信息在前面的第3步我们记住的参数就是用到这里
mysql -u root -p
change replication source to source_host='192.168.127.145',source_user='itcast',source_password='228675',source_log_file='binlog.000002',source_log_pos=663;
start slave;#启动主从复制
show slave status\G;#查看启动状态,如果Slave_Io_Running为yes、Slave_SQL_Running为yes,则表示启动成功
8、在第二台从库(192.168.127.151),去关联第二台主库,相关的信息在前面的第4步我们记住的参数就是用到这里
mysql -u root -p
change replication source to source_host='192.168.127.150',source_user='itcast',source_password='228675',source_log_file='binlog.000002',source_log_pos=663;
start slave;#启动主从复制
show slave status\G;#查看启动状态,如果Slave_Io_Running为yes、Slave_SQL_Running为yes,则表示启动成功
9、在第一台主库(192.168.127.145),把这台主库当作'从库'去复制第二台主库
mysql -u root -p
change replication source to source_host='192.168.127.150',source_user='itcast',source_password='228675',source_log_file='binlog.000002',source_log_pos=663;
start slave;#启动主从复制
show slave status\G;#查看启动状态,如果Slave_Io_Running为yes、Slave_SQL_Running为yes,则表示启动成功
10、在第二台主库(192.168.127.150),把这台主库当作'从库'去复制第一台主库
mysql -u root -p
change replication source to source_host='192.168.127.145',source_user='itcast',source_password='228675',source_log_file='binlog.000002',source_log_pos=663;
start slave;#启动主从复制
show slave status\G;#查看启动状态,如果Slave_Io_Running为yes、Slave_SQL_Running为yes,则表示启动成功
11、测试。在第一台主库执行如下语句,查看涉及到的数据库服务器的数据同步情况(也就是看一下第二台主库、第一台从库、第二台从库有没有数据)
xxxxxxxxxx
create database db01;
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;
insert into tb_user(id,name,sex) values(1,'Tom','1');
insert into tb_user(id,name,sex) values(2,'Trigger','0');
insert into tb_user(id,name,sex) values(3,'Dawn','1');
insert into tb_user(id,name,sex) values(4,'Jack Ma','1');
insert into tb_user(id,name,sex) values(5,'Coco','0');
insert into tb_user(id,name,sex) values(6,'Jerry','1');
到这里就说明你的环境是正常的,下节课我们将正式学习双主双从的读写分离操作