【mysql】mysql实现读写分离详细步骤及原理

1、原理和目的

在server集群中,选择其中一台作为master,其它都是slave,其中master能处理客户端的读/写操作,而slave们只能完成读操作,数据的更新只能从master拿日志文件完成更新。
目的是为的防治误操作导致的数据不一致的情况,通过锁定slave的写操作,保证主从服务器的数据一致。同时将读请求分散到各个服务器上,也可以减轻服务器压力,实现高可用。
该功能的实现需借助中间件完成,推荐官方中间件mysql-router,也可以使用mycat,本实例使用mysql-router完成

2、本实例环境

1)master(192.168.1.124):mysql5.7
slave(192.168.1.125):mysql5.7
mysql-router(192.168.1.126):mysql-router、mysql5.7
2)关闭防火墙&核防护:

service firewalld stop 
systemctl  disable firewalld
setenforce 0
sed -i 's/=enforcing/=disabled/g' /etc/selinux/config

3)master和slave实现主从复制,所有主机安装mysql。

3、步骤

1)获取mysql-router安装包:
https://cdn.mysql.com//Downloads/MySQL-Router/mysql-router-community-8.0.20-1.el7.x86_64.rpm
2)安装:

rpm -ivh mysql-router-community-8.0.21-1.el7.x86_64.rpm 

3)在mysql-router主机的/etc/mysqlrouter/mysqlrouter.conf中添加如下配置:

[routing:read_write]
bind_address = 192.168.1.126
bind_port = 7001
mode = read-write
destinations = 192.168.1.124:3306
max_connections = 65535
max_connect_errors = 100
client_connect_timeout = 9

[routing:read_only]
bind_address = 192.168.1.126
bind_port = 7002
mode = read-only
destinations = 192.168.1.125:3306
max_connections = 65535
max_connect_errors = 100
client_connect_timeout = 9

注释:
开两条路径,一条可读可写、一条仅读
bind_adress:mysql-router的IP地址
port:端口,可自定义。
mode:模式
desitinasion:目的数据库IP和端口
connection:最大连接数
略。。。
略。。。
4)启动服务

service mysqld start
service mysqlrouter start

5)master上配置授权两个用户

grant all on *.* to "read-write"@'%' identified by 'Sanchuang123#';
grant select on *.* to 'read-only'@'%'  identified by 'Sanchuang123#';

注释:授权语句,略。。。

4、验证

在mysql-yog之类的软件上测试读写,通过7001、7002端口连接mysql-router,即可访问相应的master、slave,之后测试读写权限即可。
到这里没问题的话就成功了,我的电脑炸了,就不测了,17款的mac air。开三台虚拟机,全部跑起来就卡死了。诸君有没有啥笔电推荐。

你可能感兴趣的:(mysql,sql,mysql,数据库)