目录
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.74.156:8066/testdb?serverTimezone=Asia/Shanghai
spring.datasource.username=mycat
spring.datasource.password=1234
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
4.4.实体类
@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);
}