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。

资源列表

一、下载安装

  1. 下载程序包和Jar包,解压mycat2-install-template-1.21.zip,把下载好的mycat2-1.21-release-jar-with-dependencies.jar放到解压文件里面的mycat2-install-template-1.21\mycat\lib文件夹下面

img

  1. 上传至linux,把整合好的文件夹mycat拷贝到 linux 下 /usr/local/
    img

  2. 修改文件夹及以下文件的权限修改成最高权限,否则运行启动命令时,会因权限不足而报错
    img

  3. 配置说明
    mycat2 的配置都在conf文件夹下,如下图
    img
    简单说明一下各个文件夹:
    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

img

常用命令如下:

show databases;

img

help;

img

登录Mycat2数据客户端

mysql -umycat -p123456 -P 8066

img

后端程序连接数据库时,不再直接连接数据库,而是改为使用Mycat2数据客户端,也就是说换成连接8066这个数据客户端
我们为可以直接使用Navicat来连接Mycat2数据客户端
img

说明:这边的账号密码是users文件夹配置的账号密码,不是数据库的账号密码,不要搞错了

img

6 配置文件说明

1、服务(server):服务相关配置

所在目录 mycat/conf 默认配置即可

img

2、用户(user): 配置MyCat客户端用户相关信息

所在目录: mycat/conf/users

img

参数说明:

#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

img

#字段含义
# 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

img

#字段含义
# 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崩溃

posted @ 2023-02-14 16:45  誓鼎  阅读(985)  评论(0编辑  收藏  举报