一、前言
搭建一主两从的架构是为了将数据库的读写操作分离开来,master数据库写数据,slave数据库查数据,以此来提升数据库的性能
主从工作流程
1.master节点接收到写入操作,执行该操作后会将该操作写入到binlog日志中
2.salve节点通过io线程同步master节点中的binlog日志,并且将同步的日志写入到relaylog日志中,master节点会通过log dump线程将binlog日志传输给slave的io线程
3.slave节点通过sql线程执行relaylog日志中的操作
通过以上的工作流程会发现主从同步是一个异步同步
此处使用了三台主机,主机配置信息如下表所示
| 名称 | ip |
| master | 10.1.60.80 |
| slave1 | 10.1.60.114 |
| slave2 | 10.1.60.115 |
二、配置
三台主机均关闭防火墙
systemctl stop firewalld
三台主机均关闭selinux
setenforce 0
三台主机均安装数据库,搭建过程参考我下面的博客
yum安装mysql 5.7_yum安装mysql5.7_Apex Predator的博客-优快云博客
三台主机均在数据库配置文件末尾加上以下配置,开启binlog
server_id=1 #三台主机不能配置相同的数字
log_bin=mysql_bin
binlog_format=mixed
max_binlog_size=1g
expire_logs_days=7
三台主机均重启数据库服务
systemctl restart mysqld
三台主机均查看binlog是否启动
mysql -uroot -p
show variables like 'log_%';
master数据库上创建slave数据库用于同步的账户
mysql -uroot -p
grant replication slave on *.* to 'test'@'%' identified by 'Qwe@1234'; #(replication slave是专门配置复制用户的权限)
flush privileges;
查看master数据库上的binlog文件与pos点(slave配置需要用到)
show master status;
配置两台slave数据库,开启同步功能,并设置只读模式
mysql -uroot -p
change master to
master_host='10.1.60.80',
master_user='test',
master_password='Qwe@1234',
master_log_file='mysql-bin.000001',
master_log_pos=589;
start slave;
set global read_only=1;
查看read_only状态
SELECT @@global.read_only;

查看两台slave数据库同步是否正常启动(slave_IO_Running和slave_SQL_Running状态都为yes)
show slave status\G
测试主从功能是否生效
master数据库创建数据
mysql -uroot -p
create database test;
use test;
create talbe student (
id int,
name varchar(20)
);
insert into student values(1,'xiaoming'),(2,'xiaohong'),(3,'xiaolin');
查看master数据库binlog日志状态
show master status;
查看slave数据库是否有同步生成test库与student表
mysql -uroot -p
show databases;
use test;
show tables;
select * from student;
查看slave库主从同步状态
show slave status\G
将三台主机地址转交给开发的时候,注明master主机只接收写请求,slave主机只接收读请求,以实现读写分离的操作(也可以通过配置一个中间件去代理区分读写请求,区分后将请求转发到与之相对应的主机上,可使用的中间件例如使用myproxy、mycat等)
本文介绍了如何搭建一主两从的MySQL数据库架构,通过读写分离提升性能。配置包括关闭防火墙和SELinux,安装数据库,设置binlog,创建复制用户,同步数据,并测试主从功能。最后讨论了读写请求的管理,可以使用中间件如myproxy、mycat进行代理。
666

被折叠的 条评论
为什么被折叠?



