Centos7 MyCat2 安装部署
部署MyCat2 之前需要搭建好数据库的主从,详看文档:mysql 主次数据库搭建
官网:http://www.mycat.org.cn/
官方文档: https://www.yuque.com/ccazhw/ml3nkf?
源码地址: https://github.com/MyCATApache/Mycat2
软件介绍
Mycat2是Mycat社区开发的一款分布式关系型数据库(中间件)。它支持分布式SQL查询,兼容MySQL通信协议,以Java生态支持多种后端数据库,通过数据分片提高数据查询处理能力。
原理
Mycat 的原理中最重要的一个动词是“拦截”,它拦截了用户发送过来的 SQL 语句,首先对 SQL 语句做了一些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此 SQL 发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户。这种方式把数据库的分布式从代码中解耦出来,程序员察觉不出来后台使用Mycat 还是 MySQL。
资源列表
- 安装程序包:http://dl.mycat.org.cn/2.0/install-template/mycat2-install-template-1.21.zip
- Jar包:http://dl.mycat.org.cn/2.0/1.21-release/mycat2-1.21-release-jar-with-dependencies.jar
一、下载安装
- 下载程序包和Jar包,解压mycat2-install-template-1.21.zip,把下载好的mycat2-1.21-release-jar-with-dependencies.jar放到解压文件里面的mycat2-install-template-1.21\mycat\lib文件夹下面
-
上传至linux,把整合好的文件夹mycat拷贝到 linux 下 /usr/local/
-
修改文件夹及以下文件的权限修改成最高权限,否则运行启动命令时,会因权限不足而报错
-
配置说明
mycat2 的配置都在conf文件夹下,如下图
简单说明一下各个文件夹:
users文件夹:这个配置的是mycat2客户端的账户密码
datasources文件夹:配置的是跟数据库连接情况,这边的账号密码都是需要数据库的账号密码
clusters文件夹:有关集群的配置
schemas文件夹:逻辑库表,有关分表分库的配置
这个配置后续都会用到,这边先了解一下
二、启动
1 在mycat连接的mysql数据库里添加用户
CREATE USER 'mycat'@'%' IDENTIFIED BY '123456';
--必须要赋的权限mysql8才有的
GRANT XA_RECOVER_ADMIN ON *.* TO 'root'@'%';
---视情况赋权限
GRANT ALL PRIVILEGES ON *.* TO 'mycat'@'%' ;
flush privileges;
建议首次配置使用数据库的root账号,这样的话如果启动有异常,就可以排除mysql账号问题,等稳定了再切换mycat账号。
下面都是以mysql的root账号为例。
2、修改mycat的prototype的配置
在启动MyCat服务之前,需要先修改下mycat的prototype元数据信息。这是MyCat运行所需要的基本信息。
配置文件在mycat/config/datasource/prototypeDs.datasource.json(勿删?),修改对应的user(用户),password(密码),url中的ip。
主要是通过url,user,password三个属性指向一个MySQL服务。如果指向的MySQL服务无法连接,那么MyCat2在启动阶段就会报错。
vim /usr/local/mycat/conf/datasources/prototypeDs.datasource.json
{
"dbType":"mysql",
"idleTimeout":60000,
"initSqls":[],
"initSqlsGetConnection":true,
"instanceType":"WRITE",
"maxCon":1000,
"maxConnectTimeout":3000,
"maxRetryCount":5,
"minCon":1,
"name":"prototypeDs",
"password":"123123",
"type":"JDBC",
"url":"jdbc:mysql://192.168.200.51:3306/mydb1?useUnicode=true&serverTimezone=Asi
a/Shanghai&characterEncoding=UTF-8",
"user":"root",
"weight":0
}
说明:这边的name既可以为数据库名称也可以是集群名称。
3、验证数据库访问情况
Mycat 作为数据库中间件要和数据库部署在不同机器上,所以要验证远程访问情况。
mysql -uroot -p123456 -h 192.168.200.51 -P 3306
mysql -uroot -p123456 -h 192.168.200.53 -P 3306
如远程访问报错,请建对应用户
grant all privileges on *.* to root@'缺少的host' identified by '123123';
4、启动mycat
linux常用命令
cd /usr/local/mycat/bin
./mycat start
./mycat status
./mycat start 启动
./mycat stop 停止
./mycat console 前台运行
./mycat install 添加到系统自动启动(暂未实现)
./mycat remove 取消随系统自动启动(暂未实现)
./mycat restart 重启服务
./mycat pause 暂停
./mycat status 查看启动状态…
如果没有报错,就说明启动正常了,也可以使用./mycat status查看状态。
5 登录Mycat2后台管理窗口
登录Mycat2管理维护客户端
mysql -umycat -p123456 -P 9066
常用命令如下:
show databases;
help;
登录Mycat2数据客户端
mysql -umycat -p123456 -P 8066
后端程序连接数据库时,不再直接连接数据库,而是改为使用Mycat2数据客户端,也就是说换成连接8066这个数据客户端
我们为可以直接使用Navicat来连接Mycat2数据客户端
说明:这边的账号密码是users文件夹配置的账号密码,不是数据库的账号密码,不要搞错了
6 配置文件说明
1、服务(server):服务相关配置
所在目录 mycat/conf 默认配置即可
2、用户(user): 配置MyCat客户端用户相关信息
所在目录: mycat/conf/users
参数说明:
#ip:客户端访问ip,建议为空,填写后会对客户端的ip进行限制
# username:用户名
# password:密码
# isolation:设置初始化的事务隔离级别
READ_UNCOMMITTED:1
READ_COMMITTED:2
REPEATED_READ:3,默认
SERIALIZABLE:4
# transactionType:事务类型
可选值:
proxy 本地事务,在涉及大于 1 个数据库的事务,commit 阶段失败会导致不一致,但是兼容性最好
xa 事务,需要确认存储节点集群类型是否支持 XA可以通过语句实现切换
可以通过语句实现切换set transaction_policy = 'xa' , set transaction_policy = 'proxy'
可以通过语句查询SELECT @@transaction_policy
3、数据源(datasource):配置Mycat连接的数据源信息
所在目录 mycat/conf/datasources
#字段含义
# dbType:数据库类型,mysql
# name:在MyCat2中定义的数据源名字
# user, password,url: 实际数据库的JDBC属性,url访问数据库地址
# type:数据源类型,默认 JDBC
# idleTimeout:空闲连接超时时间
# initSqls:初始化sql
# initSqlsGetConnection:对于 jdbc 每次获取连接是否都执行 initSqls
# instanceType:配置实例只读还是读写
可选值:READ_WRITE,READ,WRITE
#weight :负载均衡权重
# 连接相关配置
"maxCon": 1000,
"maxConnectTimeout": 3000,
"maxRetryCount": 5,
"minCon": 1,
4、集群(cluster):配置集群信息
所在目录 mycat/conf/clusters
#字段含义
# clusterType:集群类型。主要用得多的是 SINGLE_NODE
可选值:
SINGLE_NODE:单一节点
MASTER_SLAVE:普通主从
GARELA_CLUSTER:garela cluster/PXC 集群
MHA:MHA 集群
MGR:MGR 集群
# readBalanceType:查询负载均衡策略
可选值:
BALANCE_ALL(默认值): 获取集群中所有数据源
BALANCE_ALL_READ: 获取集群中允许读的数据源
BALANCE_READ_WRITE:获取集群中允许读写的数据源,但允许读的数据源优先
BALANCE_NONE: 获取集群中允许写数据源,即主节点中选择
# switchType:切换类型
可选值:
NOT_SWITCH:不进行主从切换
SWITCH:进行主从切换
5、逻辑库表(schema):配置逻辑库表,实现分库分表
所在目录 mycat/conf/schemas
vim mycat/conf/schemas/mydb1.schema.json
#库配置
{
"schemaName": "mydb",
"targetName": "prototype"
}
# schemaName:逻辑库名
# targetName:目的真实数据源或集群
# normalTables:常规表。如果物理表已经存在或者在每次启动服务时需要加载表定义,就可以写在这里。
targetName自动从prototype目标加载test库下的物理表或者视图作为单表,prototype必须是mysql服务器
#单表配置
{
"schemaName": "mysql-test",
"normalTables": {
"role_edges": {
"createTableSQL":null,//可选
"locality": {
"schemaName": "mysql",//物理库,可选
"tableName": "role_edges",//物理表,可选
"targetName": "prototype"//指向集群,或者数据源
}
}
常见问题
如何怎么把已经存在的物理表加载到mycat中?
使用schema配置中的targetName,指向目标数据源或者集群,同时保证schema的名字与目标的库相同,即可自动加载该库已经存在的物理表
mycat经常崩溃
1.检查监控的内存指标
2.使用jvm dump功能检查哪个对象占用内存
3.有没有其他程序占用大内存,导致mycat崩溃