MySQL读写分离

架构图

MySQL读写分离_第1张图片

数据库同步

MySQL读写分离_第2张图片

Master节点

开启Binary log

master节点修改my.ini配置文件

server-id=1
log-bin=master-bin
log-bin-index=master-bin.index

重启MySQL服务

SHOW MASTER STATUS

MySQL读写分离_第3张图片

创建用户

//1,在主库创建账号,用于从库的连接
//2,赋予新建的账户从库权限(不同版本设置方式不同,此处为mysql8)
 mysql> CREATE USER qiao IDENTIFIED BY '123456';
 mysql>  grant replication slave on *.* to 'qiao'@'%';
 mysql> flush privileges;

Slave节点

开启log

slave节点修改my.ini配置文件

server-id=2
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin

注:这里面的server-id 一定要和主库的不同

重启MySQL服务

关联Master

change master to master_host='127.0.0.1',
master_port=3307,
master_user='qiao',
master_password='123456',
master_log_file='master-bin.000001',
master_log_pos=0;

master_host:主库的ip
master_port:主库的端口,
master_user:连接主库的账号’,
master_password:账号的密码,
master_log_file:log文件名,
master_log_pos=0;//写0会赋予默认值

开启同步

mysql> start slave ;//启动同步

其他命令:

mysql> show slave status\G //查看启动状态,注意不要加分号
mysql> stop slave ; //停止同步

Mycat部署

安装

1、jdk安装(略)
2、mycat安装(官网http://www.mycat.org.cn/)

  • wget http://dl.mycat.org.cn/1.6.7.4/Mycat-server-1.6.7.4-release/Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz
  • tar -zxf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz -C /usr/local/

配置

schema.xml

主配置文件(读写分离、高可用、分表、节点控制)

#定义mycat工作库mycat_testdb是mycat的一个逻辑库,可以自定义,但是涉及另外一个server.xml配置文件。mycat_testdb逻辑库对应dn1这个数据节点


 
# 定义名为dn1这个数据节点的逻辑主机地址。和真实的后端数据库中的school库名。
    
 
 
# host1这个逻辑主机的最大并发连接数。最小连接(类似预热数据,提前连接好,节省临时连接的消耗)。
   
  balance默认为1,为负载均衡到所有从库读操作。
     负载均衡类型,目前的取值有4 种:
     (1)balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
     (2)balance="1",全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡。
         简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。
     (3)balance="2",所有读操作都随机的在 writeHost、readhost 上分发。
     (4)balance="3",所有读请求随机的分发到 readhost 执行,writerHost 不负担读压力
 
  writeType默认为0,写操作只分配到第一个writeHost数据库实例组。指定后端数据库软件类型。
 
  dbDriver是驱动。
 
  switchType="1"是主库宕机,自动切换到其他预备主数据库实例组
 
  dbDriver(使用native的话,因为这个值执行的是二进制的mysql协议,所以可以使用mysql和maridb,其他类型的则需要使用JDBC驱动来支持。)
    
 
 
# mycat监控后端mysql是否可用,走的心跳信息
     select user()
 
 
# 定义host1逻辑主机中的真实物理主机,这是逻辑主机中的一个真实“可写”节点,真实的数据库密码,不能瞎写
    
 
# 定义host1逻辑主机中的真实物理主机,这是逻辑主机中的一个真实“可读”节点,真实的数据库密码,不能瞎写
    

server.xml

mycat软件本身相关的配置


MySQL读写分离_第4张图片

启动

echo 'export PATH=/usr/local/mycat/bin:$PATH' >> /etc/profile
source /etc/profile
mycat start

springboot 整合

配置

#配置数据源
spring.datasource.druid.driver-class-name=com.mysql.jdbc.Driver
#这里配置的是Mycat中server.xml中配置账号密码,不是数据库的密码。
spring.datasource.druid.username=root
spring.datasource.druid.password=123456
#mycat的逻辑库 端口也是mycat的
spring.datasource.druid.url=jdbc:mysql://192.168.142.129:8066/TESTDB

使用

结合项目的ORM正常使用,过程中对mycat无感知

资料:
https://www.cnblogs.com/yuan9910/p/13807619.html
https://www.cnblogs.com/psc0218/p/13555350.html
https://blog.csdn.net/qq_38361863/article/details/109365127

你可能感兴趣的:(MySQL读写分离)