目录
Mycat是数据库中间件,所谓中间件,是一类连接软件组件和应用的计算机软件,以便软件各部件之间的通信。
例如 tomcat,web的中间件。而数据库中间件是连接Java应用程序和数据库中间的软件。
1.Java与数据库的紧耦合
2.高访问量高并发对数据库的压力
3.读写请求数据不一致
我们现在普遍的Java应用程序都是直接连接了MySQL软件进行读写操作,也就是我们在Java中的配置文件等定义了mysql的数据源,直接连接到了我们的mysql软件,但是当某些情况下我们可能需要用到了多个数据库,这个时候我们可能就需要配多个数据源去连接我们的多个数据库,这个时候我们进行sql操作的时候就会很麻烦,因为Java与数据库有了一个紧密的耦合度,但是如果我们在Java应用程序与mysql中间使用了mycat,我们只需要访问mycat就可以了,至于数据源等问题,mycat会直接帮我们搞定。
再来说一下高访问量高并发,我们都知道mysql数据库实际上在数据查询上是有一个瓶颈的,当我们的数据太多的时候,已经互联网上有高并发的请求的时候,这个时候对我们mysql的压力是非常大的,当访问量一大,就可能会出现查不出数据,响应的时间太长等,这个时候我们可能需要有多个服务器对数据库进行读写分离,以及对数据库进行集群,这个时候我们的sql语句要进行分类,哪个sql语句要访问哪个数据库,这个时候只要交给mycat就可以了。
修改端口号之后重启一下
tar -zxvf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz --解压
进入conf配置文件中
复制一下回话输入
mysql -umycat -p1234 -P 8066 -h 192.168.74.156
mycat的端口号是8066
注意一定要把防火墙关闭
- <properties>
- <java.version>1.8java.version>
- <mysql.version>5.1.4mysql.version>
- properties>
- <dependencies>
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-webartifactId>
- dependency>
- <dependency>
- <groupId>com.baomidougroupId>
- <artifactId>mybatis-plus-boot-starterartifactId>
- <version>3.5.2version>
- dependency>
- <dependency>
- <groupId>mysqlgroupId>
- <artifactId>mysql-connector-javaartifactId>
- <scope>runtimescope>
- dependency>
- <dependency>
- <groupId>org.projectlombokgroupId>
- <artifactId>lombokartifactId>
- <optional>trueoptional>
- dependency>
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-testartifactId>
- <scope>testscope>
- dependency>
- dependencies>
- 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
- @TableName(value = "t_user")
- @Data
- public class User {
- @TableId(type = IdType.AUTO)
- private Long id;
- private String name;
- }
- @Mapper
- public interface UserMapper extends BaseMapper
{ - }
- @Test
- void contextLoads() {
- User user=new User();
- user.setName("hhhhh");
- int insert = userMapper.insert(user);
- System.out.println(insert);
- }
我们发现可以同步,但是还没有实现主从分离
读的压力在从数据库
写的压力两边都有
- @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);
- }