mycat

本文介绍Mycat数据库中间件的基本概念及其在解决Java应用程序与数据库紧耦合问题中的作用。通过具体步骤演示如何安装配置Mycat,并结合Spring Boot项目实现数据库的读写分离,减轻高并发场景下对数据库的压力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1.什么是mycat

 

2.为什么使用mycat

3.使用mycat

3.1.克隆一台虚拟机并且修改端口号

3. 2.上传并解压mycat

3.3.修改配置文件

 3.3.1.schema.xml配置文件

3.3.2.server.xml配置文件

 3.3.3.启动mycat

3.3.4.登录mycat

4.测试

4.1.新建一个spring-boot的项目--省略

4.2.添加依赖

 4.3.配置文件

 4.4.实体类

 4.5.mapper类

4.6.测试类

5.实现主从分离

 ​编辑

 5.1.修改schema.xml配置文件

5.2.测试


1.什么是mycat

Mycat数据库中间件,所谓中间件,是一类连接软件组件和应用的计算机软件,以便软件各部件之间的通信。

        例如 tomcat,web的中间件。而数据库中间件是连接Java应用程序和数据库中间的软件。

 

2.为什么使用mycat

1.Java与数据库的紧耦合

2.高访问量高并发对数据库的压力

3.读写请求数据不一致

 我们现在普遍的Java应用程序都是直接连接了MySQL软件进行读写操作,也就是我们在Java中的配置文件等定义了mysql的数据源,直接连接到了我们的mysql软件,但是当某些情况下我们可能需要用到了多个数据库,这个时候我们可能就需要配多个数据源去连接我们的多个数据库,这个时候我们进行sql操作的时候就会很麻烦,因为Java与数据库有了一个紧密的耦合度,但是如果我们在Java应用程序与mysql中间使用了mycat,我们只需要访问mycat就可以了,至于数据源等问题,mycat会直接帮我们搞定。

        再来说一下高访问量高并发,我们都知道mysql数据库实际上在数据查询上是有一个瓶颈的,当我们的数据太多的时候,已经互联网上有高并发的请求的时候,这个时候对我们mysql的压力是非常大的,当访问量一大,就可能会出现查不出数据,响应的时间太长等,这个时候我们可能需要有多个服务器对数据库进行读写分离,以及对数据库进行集群,这个时候我们的sql语句要进行分类,哪个sql语句要访问哪个数据库,这个时候只要交给mycat就可以了。

 

3.使用mycat

3.1.克隆一台虚拟机并且修改端口号

修改端口号之后重启一下

3. 2.上传并解压mycat

 tar -zxvf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz --解压

 

 

3.3.修改配置文件

进入conf配置文件中

 3.3.1.schema.xml配置文件

 

3.3.2.server.xml配置文件

 3.3.3.启动mycat

 

3.3.4.登录mycat

复制一下回话输入

mysql -umycat -p1234 -P 8066 -h 192.168.74.156

mycat的端口号是8066

 注意一定要把防火墙关闭

4.测试

4.1.新建一个spring-boot的项目--省略

4.2.添加依赖

<properties>
        <java.version>1.8</java.version>
        <mysql.version>5.1.4</mysql.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.2</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

 4.3.配置文件

server.port=8080
spring.datasource.url=jdbc:mysql://192.168.42.150:8066/testdb?serverTimezone=Asia/Shanghai
spring.datasource.username=mycat
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

 4.4.实体类

@TableName(value = "t_user")
@Data
    public class User {
        @TableId(type = IdType.AUTO)
        private  Long id;
        private String name;
    }

 4.5.mapper类

@Mapper
public interface UserMapper extends BaseMapper<User> {
}

4.6.测试类

  @Test
    void contextLoads() {
        User user=new User();
        user.setName("hhhhh");
        int insert = userMapper.insert(user);
        System.out.println(insert);
    }

我们发现可以同步,但是还没有实现主从分离

5.实现主从分离

 

 5.1.修改schema.xml配置文件

5.2.测试

读的压力在从数据库

写的压力两边都有

  @Autowired
    private UserMapper userMapper;
 
    @Test
    void contextLoads() {
        User user=new User();
        user.setName("gggg");
        int insert = userMapper.insert(user);
        System.out.println(insert);
    }
    @Test
    public void demo1(){
        User user = userMapper.selectById(1);
        System.out.println(user);
    }

 

### Mycat 使用指南及配置详解 Mycat 是一款开源的分布式数据库中间件,支持 MySQL 协议,可以透明地连接到任何支持 MySQL 的应用。它主要用于解决大数据场景下的读写分离、分库分表等问题[^5]。 #### 1. Mycat 的核心功能 Mycat 提供了多种核心功能以满足复杂的数据库管理需求: - **分库分表**:通过自定义规则将数据分散到多个物理数据库中,从而提升性能和扩展性[^3]。 - **读写分离**:支持主从复制架构,将读操作路由到从库,写操作路由到主库,从而减轻主库的压力[^5]。 - **动态数据路由**:根据业务需求动态调整分片策略,灵活应对不同的查询场景。 - **高可用性**:提供主备切换和故障自动恢复等功能,确保系统的稳定运行[^5]。 #### 2. Mycat 的安装与环境准备 在使用 Mycat 之前,需要完成以下环境准备工作: - 安装 Java 环境(Mycat 基于 Java 开发)。 - 准备 MySQL 数据库实例,并配置主从复制(如果需要读写分离)。 - 下载并解压 Mycat 安装包,启动服务。 #### 3. Mycat 的核心配置文件 Mycat 的配置主要通过几个关键文件完成,以下是其中最重要的部分: - **schema.xml**:该文件定义了逻辑库、表、分片规则、DataNode 和 DataSource 的映射关系。正确配置这些内容是使用 Mycat 的基础[^3]。 示例配置: ```xml <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100"> <table name="user" dataNode="dn1,dn2" rule="mod-long"/> </schema> <dataNode name="dn1" dataHost="host1" database="db1"/> <dataNode name="dn2" dataHost="host2" database="db2"/> <dataHost name="host1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="hostM1" url="jdbc:mysql://192.168.1.1:3306/db1" user="root" password="123456"/> </dataHost> ``` - **server.xml**:用于配置全局参数,例如用户权限、字符集等[^3]。 - **rule.xml**:定义分片规则,例如基于哈希、范围或列表的分片方式[^3]。 #### 4. Mycat 的分库分表实现 Mycat 的分库分表功能通过 `schema.xml` 中的配置实现。以下是一个简单的分库分表示例: - 将 `user` 表的数据按照 `id` 的模数分配到两个数据库中(`db1` 和 `db2`)。 - 配置分片规则为 `mod-long`,表示根据 `id` 的值取模分配数据。 ```xml <table name="user" dataNode="dn1,dn2" rule="mod-long"/> <rule name="mod-long" column="id" algorithm="mod_long"/> ``` #### 5. Mycat 的读写分离配置 Mycat 支持主从复制架构下的读写分离。通过在 `dataHost` 中配置 `writeHost` 和 `readHost`,可以实现将读操作路由到从库,写操作路由到主库。 示例配置: ```xml <dataHost name="host1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="hostM1" url="jdbc:mysql://192.168.1.1:3306/db1" user="root" password="123456"/> <readHost host="hostS1" url="jdbc:mysql://192.168.1.2:3306/db1" user="root" password="123456"/> </dataHost> ``` #### 6. 常见问题及解决方案 - **问题 1**:无法连接到 Mycat 服务。 - 检查 Mycat 的 `server.xml` 文件中是否正确配置了端口和用户权限。 - **问题 2**:分库分表后查询结果不完整。 - 确保 `schema.xml` 中的分片规则与实际数据分布一致[^3]。 - **问题 3**:读写分离时出现延迟。 - 检查主从复制的延迟情况,并优化 MySQL 的复制配置[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值