MyCat搭建mysql读写分离介绍,并使用SpringBoot测试

举报
小毕超 发表于 2022/06/23 22:45:33 2022/06/23
【摘要】 MyCat搭建mysql读写分离介绍,并使用SpringBoot测试 一、mysql主从复制 MySQL的主从复制是MySQL本身自带的一个功能,不需要额外的第三方软件就可以实现,其复制功能并不是co...

MyCat搭建mysql读写分离介绍,并使用SpringBoot测试

一、mysql主从复制

MySQL的主从复制是MySQL本身自带的一个功能,不需要额外的第三方软件就可以实现,其复制功能并不是copy文件来实现的,而是借助binlog日志文件里面的SQL命令实现的主从复制,可以理解为我再Master端执行了一条SQL命令,那么在Salve端同样会执行一遍,从而达到主从复制的效果。

二、主从复制原理

MySQL的主从复制是MySQL本身自带的一个功能,不需要额外的第三方软件就可以实现,其复制功能并不是copy文件来实现的,而是借助binlog日志文件里面的SQL命令实现的主从复制,可以理解为我再Master端执行了一条SQL命令,那么在Salve端同样会执行一遍,从而达到主从复制的效果。
从库生成两个线程,一个I/O线程,一个SQL线程;
i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;
主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;
SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;

三、什么是MyCat

MyCAT是一款由阿里Cobar演变而来的用于支持数据库,读写分离、分表分库的分布式中间件。MyCAT支持Oracle、MSSQL、MYSQL、PG、DB2关系型数据库,同时也支持MongoDB等非关系型数据库。
MyCAT原理MyCAT主要是通过对SQL的拦截,然后经过一定规则的分片解析、路由分析、读写分离分析、缓存分析等,然后将SQL发给后端真实的数据块,并将返回的结果做适当处理返回给客户端。

官方网站:http://www.mycat.org.cn/

四、环境搭建

有三台服务器分别为:

ip 用途
192.168.0.105 主数据库
192.168.0.106 从数据库
192.168.0.107 mycat虚拟数据库

(1)安装mysql

三台服务器中其中主从数据库需要安装mysql,mycat不需要安装。
开始安装:

  1. 先检查系统是否装有mysql
rpm -qa | grep mysql

  
 
  • 1
  1. 下载mysql的repo源
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm

  
 
  • 1

报错: -bash: wget: 未找到命令
安装插件

  yum -y install wget

  
 
  • 1
  1. 安装mysql-community-release-el7-5.noarch.rpm包
sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm

  
 
  • 1
  1. 安装MySQL
sudo yum install mysql-server

  
 
  • 1
  1. 重置MySQL密码
mysql -u root

  
 
  • 1

报错:

ERROR 2002 (HY000): Can’t connect to local MySQL server through socket
‘/var/lib/mysql/mysql.sock’ (2)

原因:原因是/var/lib/mysql的访问权限问题。

chown root /var/lib/mysql/

  
 
  • 1
  1. 重启MySQL服务
service mysqld restart

  
 
  • 1
  1. 接着登陆设置密码
mysql -u root
use mysql;
update user set password=password('123456') where user='root';
exit;

  
 
  • 1
  • 2
  • 3
  • 4

接着继续重启MySQL服务

service mysqld restart

  
 
  • 1
  1. 接着设置Root账户远程连接密码
 mysql -u root -p
GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "root"; 

  
 
  • 1
  • 2

重启服务器

service mysqld restart

  
 
  • 1
  1. 开放端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent&firewall-cmd --reload

  
 
  • 1

(2)配置主从

1、主数据库

192.168.0.105

修改/etc/my.cnf,添加如下内容:

server-id=105 ###服务器id
log-bin=mysql-bin   ###开启日志文件

  
 
  • 1
  • 2

重启mysql服务:

service mysqld restart

  
 
  • 1

验证是否已经配置成功,如果能够查询对应配置文件中的server_id 说明已经配置成功。

show variables like '%server_id%';

  
 
  • 1

查看状态,如果能够看到同步的文件,和行数 说明已经配置成功。

show master status;

  
 
  • 1

2、从数据库

192.168.0.106

修改/etc/my.cnf,添加如下内容。

server-id=106  ###从服务器server_id
log-bin=mysql-bin  ###日志文件同步方式
binlog-do-db=test   ###同步数据库

  
 
  • 1
  • 2
  • 3

重启mysql服务:

service mysqld restart

  
 
  • 1

验证是否已经配置成功,如果能够查询对应配置文件中的server_id 说明已经配置成功。

show variables like '%server_id%';

  
 
  • 1

从服务器同步主服务器配置

change master to master_host='192.168.0.105',master_user='root',master_password='root',master_log_file='mysql-bin.000001',master_log_pos=120;

  
 
  • 1

开始同步

start slave;

  
 
  • 1

检查从服务器复制功能状态

SHOW SLAVE STATUS;

  
 
  • 1

到此主从复制环境创建成功!,可以在主数据库创建一个数据库去从数据库中查看是否有同步。

(3)配置MyCat

192.168.0.107

下载MyCat,选择Linux版本下载。

下载地址 https://github.com/MyCATApache/Mycat-Server/releases

上传至服务器:

scp G:\SpringBoot2X\Mycat-server-1.6.5-release-20180122220033-linux.tar.gz root@192.168.2.123:/home/bxc/bxc/mycat

  
 
  • 1

解压:

tar -zxvf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz

  
 
  • 1

进入conf 目录,有三个重要文件;

文件 说明
server.xml Mycat的配置文件,设置账号、参数等
schema.xml Mycat对应的物理数据库和数据库表的配置
rule.xml Mycat分片(分库分表)规则

配置 schema.xml

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
    <!-- TESTDB1 是mycat的逻辑库名称,链接需要用的 -->
    <schema name="mycat_testdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema>
        <!-- database 是MySQL数据库的库名 -->
    <dataNode name="dn1" dataHost="localhost1" database="mybxc" />
    <!--
    dataNode节点中各属性说明:
    name:指定逻辑数据节点名称;
    dataHost:指定逻辑数据节点物理主机节点名称;
    database:指定物理主机节点上。如果一个节点上有多个库,可使用表达式db$0-99,     表示指定0-99这100个数据库;

    dataHost 节点中各属性说明:
        name:物理主机节点名称;
        maxCon:指定物理主机服务最大支持1000个连接;
        minCon:指定物理主机服务最小保持10个连接;
        writeType:指定写入类型;
            0,只在writeHost节点写入;
            1,在所有节点都写入。慎重开启,多节点写入顺序为默认写入根据配置顺序,第一个挂掉切换另一个;
        dbType:指定数据库类型;
        dbDriver:指定数据库驱动;
        balance:指定物理主机服务的负载模式。
            0,不开启读写分离机制;
            1,全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡;
            2,所有的readHost与writeHost都参与select语句的负载均衡,也就是说,当系统的写操作压力不大的情况下,所有主机都可以承担负载均衡;
-->
    <dataHost name="localhost1" maxCon="1000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <!-- 可以配置多个主从 -->
        <writeHost host="hostM1" url="192.168.2.120:3306" user="root" password="root">
            <!-- 可以配置多个从库 -->
            <readHost host="hostS2" url="192.168.2.121:3306" user="root" password="root" />
        </writeHost>
    </dataHost>
</mycat:schema>

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

配置 server.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
   

   <!-- 读写都可用的用户 -->
    <user name="root" defaultAccount="true">
        <property name="password">123456</property>
        <property name="schemas">mycat_testdb</property>

        <!-- 表级 DML 权限设置 -->
        <!--        
        <privileges check="false">
            <schema name="TESTDB" dml="0110" >
                <table name="tb01" dml="0000"></table>
                <table name="tb02" dml="1111"></table>
            </schema>
        </privileges>       
         -->
    </user>

    <!-- 只读用户 -->
    <user name="user">
        <property name="password">user</property>
        <property name="schemas">mycat_testdb</property>
        <property name="readOnly">true</property>
    </user>

</mycat:server>

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

注意数据库的名字;
然后进入bin目录启动mycat :

./mycat start

  
 
  • 1

五、测试

使用NaviCat 连接Mycat服务的虚拟数据库:
ip:192.168.0.107
port:8066
账号:root
密码123456

就可以对数据进行增删该查了。

六、SpringBoot测试

新建SpringBoot项目,添加依赖:

  		<dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>2.3</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.37</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.6</version>
        </dependency>

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

application.properties配置

#mysql

spring.datasource.url=jdbc:mysql://192.168.2.123:8066/mycat_testdb?useUnicode=true&characterEncoding=utf8

spring.datasource.username=root

spring.datasource.password=123456

spring.datasource.type =com.alibaba.druid.pool.DruidDataSource

mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

spring.datasource.driver-class-name=com.mysql.jdbc.Driver

#mybatis-plus
#mybatis-plus.mapper-locations=classpath:com/mht/springbootmybatisplus/mapper/xml/*.xml

mybatis-plus.type-aliases-package=com.bxc.eurekaprovide.Entity

mybatis-plus.configuration.map-underscore-to-camel-case: true

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

下面就和普通操作数据库一样了。

文章来源: blog.csdn.net,作者:小毕超,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq_43692950/article/details/107731431

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200