Mycat 是数据库中间件。
1、数据库中间件
中间件:是一类连接软件组件和应用的计算机软件,以便于软件各部件之间的沟通。
例子:Tomcat,web中间件。
数据库中间件:连接java应用程序和数据库
2、为什么要用Mycat?
① Java与数据库紧耦合。
② 高访问量高并发对数据库的压力。
③ 读写请求数据不一致
3.Mycat可以干什么?
1、读写分离
2、数据分片
3、多数据源整合
数据库中间件对比
MyCAT2名词解释
分库分表 :按照一定规则把数据库中的表拆分为多个带有数据库实例、物理库、物理表访问路径的分表(重点)。
逻辑库 :数据库代理中的数据库,它可以包含多个逻辑表。
逻辑表: 数据库代理中的表,它可以映射代理连接的数据库中的表(物理表)。
物理库 数据库代理连接的数据库中的库,比如MySQL上的information_schema。
物理表 数据库代理连接的数据库中的表,比如MySQL上的information_schema.TABLES(重点)。
拆分键 即分片键,描述拆分逻辑表的数据规则的字段。
分区键 当使用等值查询的时候,能直接映射一个分区的拆分键。
物理分表 指已经进行数据拆分的,在数据库上面的物理表,是分片表的一个分区。
物理分库 一般指包含多个物理分表的库。
分库 一般指通过多个数据库拆分分片表,每个数据库一个物理分表,物理分库名字相同。
分片表、水平分片表 按照一定规则把数据拆分成多个分区的表,在分库分表语境下,它属于逻辑表的一种。
全局表(广播表) 每个数据库实例都冗余全量数据的逻辑表。 它通过表数据冗余,使分片表的分区与该表的数据在同一个数据库实例里,达到JOIN运算能够直接在该 数据库实例里执行。它的数据一致一般是通过数据库代理分发SQL实现,也有基于集群日志的实现。
集群 多个数据节点组成的逻辑节点,在MyCAT2里,它是把对多个数据源地址视为一个数据源地址(名称),并 提供自动故障恢复、转移、即实现高可用、负载均衡的组件。
数据源 连接后端数据库的组件,它是数据库代理中连接后端数据库的客户端。
schema(库) 在MyCAT2中配置表逻辑,视图等的配置。
安装及启动
安装
1.使用MyCAT 2要安装jdk,MyCAT 2基于JDK 1.8开发。(私信我发送)
[root@service ~]# ll
总用量 186424
-rw-------. 1 root root 1293 9月 7 16:34 anaconda-ks.cfg
-rw-r--r--. 1 root root 190890122 2月 22 2022 jdk-8u171-linux-x64.tar.gz
[root@service ~]# tar -zxvf jdk-8u171-linux-x64.tar.gz
2.下载安装包 下载对应的tar安装包,以及对应的jar包
wget -c http://dl.mycat.org.cn/2.0/install-template/mycat2-install-template-1.21.zip
wget -c http://dl.mycat.org.cn/2.0/1.21-release/mycat2-1.21-release-jar-with-dependencies.jar
3.解压,把所需的jar复制到mycat/lib目录,修改目录权限
[root@service ~]# unzip mycat2-install-template-1.21.zip -d /usr/local/
[root@service ~]# cp mycat2-1.21-release-jar-with-dependencies.jar /usr/local/mycat/lib/
[root@service ~]# cd /usr/local/mycat/bin/
修改文件夹及以下文件的权限
[root@service bin]# chmod +x *
mycat目录结构
[root@service bin]# ll /usr/local/mycat/
总用量 12
drwxr-xr-x. 2 root root 4096 3月 5 2021 bin
drwxr-xr-x. 9 root root 4096 3月 5 2021 conf
drwxr-xr-x. 2 root root 4096 2月 27 18:24 lib
drwxr-xr-x. 2 root root 6 3月 5 2021 logs
4.启动一个MySQL,因为mycat代理启动时需要一个默认的数据源,所以我们在启动时为其准备一个数据源。
mysql> CREATE USER 'mycat'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
mysql> CREATE USER 'mycat'@'%' IDENTIFIED WITH mysql_native_password BY 'Wyxbuke00.';
Query OK, 0 rows affected (0.02 sec)
mysql> GRANT XA_RECOVER_ADMIN ON *.* TO 'mycat'@'%';
Query OK, 0 rows affected (0.01 sec)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'mycat'@'%' ;
Query OK, 0 rows affected (0.02 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.02 sec)
5.配置物理库地址
[root@service bin]# vim /usr/local/mycat/conf/datasources/prototypeDs.datasource.json
{
"dbType":"mysql",
"idleTimeout":60000,
"initSqls":[],
"initSqlsGetConnection":true,
"instanceType":"READ_WRITE",
"logAbandoned":true,
"maxCon":1000,
"maxConnectTimeout":30000,
"maxRetryCount":5,
"minCon":1,
"name":"prototypeDs",
"password":"123456",
"queryTimeout":0,
"removeAbandoned":false,
"removeAbandonedTimeoutSecond":180,
"type":"JDBC",
"url":"jdbc:mysql://localhost:3306/mysql?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true",
"user":"root",
"weight":0
}
启动mycat
①控制台启动 :去 mycat/bin 目录下执行 ./mycat console
②后台启动 :去 mycat/bin 目录下 ./mycat start
[root@service bin]# ./mycat start
Starting mycat2...
[root@service bin]# ./mycat status;
mycat2 is running (6513).
[root@service schemas]# mysql -uroot -pWyxbuke00. -P8066 -h192.168.142.139