一、什么是MyCAT

MyCAT是目前最流行的分布式数据库中间插件,是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器。前端用户可以把它看作一个数据库代理,用MySQL客户端工具和命令行访问,其后端可以用MySQL原生协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里。

二、为什么使用MyCAT

随着互联网的发展,数据的量级也是呈指数的增长,从GB到TB到PB,操作数据也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求。

而NoSQL的出现暂时解决了这一危机。

NoSQL通过降低数据的安全性,减少对事务的支持,减少对复杂查询的支持,来提升性能。 但是,NoSQL存在无法满足某些使用场景的情况,比如,有些使用场景绝对要有事务与安全指标。这时NoSQL肯定无法满足。

所以,我们还是需要使用关系型数据库。

那么,如何使用关系型数据库解决海量存储的问题呢?此时就需要做数据库集群,为了提高查询性能将一个数据库的数据分散到不同的数据库中存储,为应对该问题,MyCAT 就出现了。

我们来总结一下MyCAT的作用:

1)能满足数据库数据大量存储;

2)提高了查询性能;

3)实现读写分离,分库分表。

同时,MyCAT 还可以解决如下问题。

1)解决表的容量问题:MySQL的表最大存储多少数据?500W条。

2)解决表查询的性能问题?我的表里面的数据非常多,导致我查询很慢?

3)解决表的DML的性能问题?

4)解决MySQL挂了的问题。

三、MyCAT和MySQL的区别

我们可以把上层看作是对下层的抽象,例如操作系统是对各类计算机硬件的抽象。那么我们什么时候需要抽象?

假设一个项目只需要一个人完成时,我们不需要Leader,但是当需要几十人完成时,就应该有一个管理者,发挥沟通协调等作用,这个管理者对于他的上层来说就是对项目组的抽象。

同样的,当我们的应用只需要一台数据库服务器时,我们并不需要MyCAT,如果你需要分库甚至分表,这时候应用要面对很多个数据库时,这时,就需要对数据库层做一个抽象,来管理这些数据库,最上面的应用只需要面对一个数据库层的抽象或者说数据库中间件就好了,这就是MyCAT的核心作用。

所以你可以这样理解:数据库是对底层存储文件的抽象,而MyCAT是对数据库的抽象。

四、MyCAT2的安装

2安装JDK1.8

CentOS7

yum -y install java-1.8.0-openjdk.x86_64

Ubuntu22.04

apt install openjdk-8-jdk-headless

测试安装,显示java版本则为安装成功

java -version

openjdk version “1.8.0_392”
OpenJDK Runtime Environment Corretto-8.392.08.1 (build 1.8.0_392-b08)
OpenJDK 64-Bit Server VM Corretto-8.392.08.1 (build 25.392-b08, mixed mode)
3.3 安装MyCAT2
3.3.1 创建/usr/local/src
mkdir -p /usr/local/src
3.3.2 进入/usr/local/src目录
cd /usr/local/src
3.3.3 下载

如果没有wget

CentOS7安装wget

yum -y install wget

Ubuntu22.04安装wget

apt install wget

官方下载路径(经测试,目前失效了)

wget http://dl.mycat.org.cn/2.0/install-template/mycat2-install-template-1.21.zip

wget http://dl.mycat.org.cn/2.0/1.21-release/mycat2-1.21-release-jar-with-dependencies.jar

第三方下载

wget https://download.topunix.com/MySQL/Software-Cluster/Software-Mycat/Mycat2/mycat2-install-template-1.20.zip

wget https://download.topunix.com/MySQL/Software-Cluster/Software-Mycat/Mycat2/mycat2-1.21-release-jar-with-dependencies.jar

局域网下载(192.168.57.200)

wget http://192.168.57.200/Software/mycat2-install-template-1.21.zip
wget http://192.168.57.200/Software/mycat2-1.21-release-jar-with-dependencies.jar
3.3.4 下载完成
img

3.3.5 解压并移动到/usr/local目录下

CentOS7

yum -y install unzip

Ubuntu22.04

apt install unzip

解压Mycat2

unzip mycat2-install-template-1.21.zip
mv mycat …/
3.3.6 修改权限
把bin目录的文件加执行权限:

cd /usr/local/mycat/
chmod +x bin/*
3.3.7 把所需的jar复制到mycat/lib目录

mycat2-1.21-release-jar-with-dependencies.jar是MyCAT2依赖文件,缺失会导致MyCAT启动失败

cp /usr/local/src/mycat2-1.21-release-jar-with-dependencies.jar /usr/local/mycat/lib/
3.4 MyCAT的目录结构
img

其中:

1)bin 执行命令的目录

2)conf 配置文件

3)lib 依赖包

4)logs 日志包

3.5 启动一个3306的MySQL
回为mycat代理连接启动时需要有一个默认的数据源,所以我们在启动的时候先为其准备一个数据源,启动mysql

service mysqld start #启动mysql服务
mysql -uroot -proot123 # 能够连接而上mysql
3.6 配置物理库地址
在启动之前我们要配置物理库的地址,要不然MyCAT启动就会报错。

配置文件位置: /usr/local/mycat/conf/datasources/prototypeDs.datasource.json

{
“dbType”: “mysql”,
“idleTimeout”: 60000,
“initSqls”: [],
“initSqlsGetConnection”: true,
“instanceType”: “READ_WRITE”,
“maxCon”: 1000,
“maxConnectTimeout”: 3000,
“maxRetryCount”: 5,
“minCon”: 1,
“name”: “prototypeDs”,
“password”: “root123”,
“type”: “JDBC”,
“url”: “jdbc:mysql://localhost:3306?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8”,
“user”: “root”,
“weight”: 0
}
3.7 启动MyCAT
cd /usr/local/mycat/bin
./mycat start 启动
./mycat stop 停止
./mycat console 前台运行
./mycat install 添加到系统自动启动
./mycat remove 取消随系统自动启动
./mycat restart 重启
./mycat pause 暂停
./mycat status 查看启动状态

可以配置MyCAT和MySQL的环境变量,方便之后执行

vim /etc/profile

在文件末行添加:

export MYCAT_PATH=/usr/local/mycat
export MYSQL_PATH=/usr/local/mysql
export PATH=“MYSQLPATH/bin:MYSQL_PATH/bin:MYSQLPATH/bin:MYCAT_PATH/bin:$PATH”

ESC:wq退出文件:重新加载配置文件

source /etc/profile
3.7.1 查看logs/wrapper.log文档看错
cat /usr/local/mycat/logs/wrapper.log 如果出现下面的信息就说明启动成功了。

img

3.8 连接MyCAT
我们在外面看MyCAT,认为MyCAT 就是一个MySQL,怎么连接MySQL?

MyCAT的默认用户是:root
初始密码是:123456
端口号是:8066

  1. 使用MySQL默认客户端或者mycli命令行登陆MyCAT

mysql -uroot -p123456 -P8066 -h127.0.0.1

或者

mycli -uroot -P8066 -h"127.0.0.1"

Logo

汇聚全球AI编程工具,助力开发者即刻编程。