美文网首页
MySQL读写分离

MySQL读写分离

作者: s1991721 | 来源:发表于2021-05-21 14:27 被阅读0次

架构图

数据库同步

Master节点

开启Binary log

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

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

重启MySQL服务

SHOW MASTER STATUS

创建用户

//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/

配置

schema.xml

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

#定义mycat工作库mycat_testdb是mycat的一个逻辑库,可以自定义,但是涉及另外一个server.xml配置文件。mycat_testdb逻辑库对应dn1这个数据节点
<schema name="mycat_testdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
</schema>
 
# 定义名为dn1这个数据节点的逻辑主机地址。和真实的后端数据库中的school库名。
    <dataNode name="dn1" dataHost="host1" database="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驱动来支持。)
    <dataHost name="host1" maxCon="1000" minCon="10" balance="2" writeType="0" dbType="mysql" dbDriver="native" switchType="1">
 
 
# mycat监控后端mysql是否可用,走的心跳信息
     <heartbeat>select user()</heartbeat>
 
 
# 定义host1逻辑主机中的真实物理主机,这是逻辑主机中的一个真实“可写”节点,真实的数据库密码,不能瞎写
    <writeHost host="hostM1" url="192.168.1.128:3306" user="root" password="abc123">
 
# 定义host1逻辑主机中的真实物理主机,这是逻辑主机中的一个真实“可读”节点,真实的数据库密码,不能瞎写
    <readHost host="hostS1" url="192.168.1.130:3306" user="root" password="abc123" />

server.xml

mycat软件本身相关的配置


启动

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读写分离

      本文链接:https://www.haomeiwen.com/subject/zrlwjltx.html